• ベストアンサー

クロス集計とかで可能なのでしょうか?

商品 購入日  数量 A   07/01  10 A   07/02  20 B   07/01  15 B   07/03  5 C   07/04  20 D   07/02  30 D   07/05  35 D   07/06  40 このようなテーブルがあります。 各商品の購入は、MAX5回までとなっています。 それを 商品|購入1   |購入2  | 購入3  |購入4|購入5 A  |07/01 10|07/02 20| B  |07/01 15|07/03  5| C  |07/04 20| D  |07/02 30|07/05 35|07/06 40 のような表記にしたいのですが、 クロス集計で可能なのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ganbaro
  • ベストアンサー率45% (43/94)
回答No.3

CHRONOS_0さんの内容にangelinaaneさんがほしい内容に書き加えてみました。 テスト済みです。 クエリー1 SELECT 購入履歴.商品, 購入履歴.購入日, 購入履歴.数量, "購入" & DCount("*","購入履歴","購入日<=#" & [購入日] & "# and 商品='" & [商品] & "'") AS 列, Format([購入日],"mm/dd") & Right(" " & Format([数量],"#"),3) AS 購入日数量 FROM 購入履歴; このクエリーをもとにクロス集計 TRANSFORM First(クエリー1.購入日数量) AS 購入日数量の先頭 SELECT クエリー1.商品 FROM クエリー1 GROUP BY クエリー1.商品 PIVOT クエリー1.列; とすると希望道理の結果が得られると思います

angelinaane
質問者

お礼

詳しく、ありがとうございます。 ほんとうは、実際のテーブルはもっと複雑でこんなに簡単なモノではないのですが、糸口は見えました。 がんばってみます。 ほんとにありがとうございました。

その他の回答 (2)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

商品毎に購入日の順に連番を振りそれを列に指定します クエリで下のような式フィールドを作ります 列:"購入" & DCount("*","テーブル名","購入日<=#" & 購入日 & "# and 商品='" & 商品 & "'") このクエリをクロス集計クエリに変え 商品:行 列:列 購入日:値:先頭 購入日のデータ型は日付時刻型だとしています

angelinaane
質問者

お礼

ありがとうございます。 ほんとうは、実際のテーブルはもっと複雑でこんなに簡単なモノではないのですが、糸口は見えました。 というか考え方がわかりました。 がんばってみます。 ほんとにありがとうございました。

回答No.1

商品毎の購入日がユニークな登録内容であれば、 こんな感じで書けるんじゃないですかね。 select 商品, max(case when 位置=1 then 購入日 else null end) as 購入日1, max(case when 位置=1 then 数量 else null end) as 数量1, max(case when 位置=2 then 購入日 else null end) as 購入日2, max(case when 位置=2 then 数量 else null end) as 数量2, max(case when 位置=3 then 購入日 else null end) as 購入日3, max(case when 位置=3 then 数量 else null end) as 数量3, max(case when 位置=4 then 購入日 else null end) as 購入日4, max(case when 位置=4 then 数量 else null end) as 数量4, max(case when 位置=5 then 購入日 else null end) as 購入日5, max(case when 位置=5 then 数量 else null end) as 数量5 from ( select 商品,購入日,数量, (select count(*) from テーブル as b where a.商品=b.商品 and a.購入日>=b.購入日) as 位置 from テーブル as a group by 商品 ) as c groiup by 商品 テストしてないので、チョンボがあるかも。

関連するQ&A