- ベストアンサー
クロス集計とかで可能なのでしょうか?
商品 購入日 数量 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 のような表記にしたいのですが、 クロス集計で可能なのでしょうか? よろしくお願いします。
- みんなの回答 (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.列; とすると希望道理の結果が得られると思います
その他の回答 (2)
- CHRONOS_0
- ベストアンサー率54% (457/838)
商品毎に購入日の順に連番を振りそれを列に指定します クエリで下のような式フィールドを作ります 列:"購入" & DCount("*","テーブル名","購入日<=#" & 購入日 & "# and 商品='" & 商品 & "'") このクエリをクロス集計クエリに変え 商品:行 列:列 購入日:値:先頭 購入日のデータ型は日付時刻型だとしています
お礼
ありがとうございます。 ほんとうは、実際のテーブルはもっと複雑でこんなに簡単なモノではないのですが、糸口は見えました。 というか考え方がわかりました。 がんばってみます。 ほんとにありがとうございました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
商品毎の購入日がユニークな登録内容であれば、 こんな感じで書けるんじゃないですかね。 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 商品 テストしてないので、チョンボがあるかも。
お礼
詳しく、ありがとうございます。 ほんとうは、実際のテーブルはもっと複雑でこんなに簡単なモノではないのですが、糸口は見えました。 がんばってみます。 ほんとにありがとうございました。