こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access フィールドから値を取り出す

お世話になります。

・テーブル
会員番号(テキスト),商品名(テキスト),売上数(数値)
「商品名」には商品Aと商品Bがあります。

会員番号ごとに商品Aと商品Bそれぞれの売上数を分けて表示したいです。

・クエリ
SELECT 会員番号,商品A,売上数A,商品B,売上数B
WHERE テーブル.商品名 = "商品A" = 商品A
AND テーブル.商品名 = "商品B" = 商品B
FROM テーブル
GROUP BY 会員番号,商品A,売上数A,商品B,売上数B;

会員番号ごとに並べたいので、クエリをグループ化したところ、
会員番号「1」の商品Aは3件、商品Bは10件だった場合の結果として
----------------------------
会員番号,商品A,売上数A,商品B,売上数B
1,商品A,3,商品B,3
1,商品A,10,商品B,10
----------------------------
このように会員番号が重複して表示されてしまいます。

欲しい結果
----------------------------
会員番号,商品A,売上数A,商品B,売上数B
1,商品A,3,商品B,10
----------------------------

同一の会員番号につき、商品と売上数を1行でまとめられないでしょうか。
どうぞよろしくおねがいいたします。

投稿日時 - 2013-06-26 20:41:33

QNo.8151104

困ってます

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

クロス集計クエリではダメなの?
TRANSFORM Sum([売上数]) AS 売上数の合計
SELECT [会員番号], Sum([売上数]) AS [合計 売上数]
FROM テーブル
GROUP BY [会員番号]
PIVOT [商品名];

ダメならこんなのでも・・・。
SELECT 会員番号,
"商品名A" AS 商品名A,
Sum(IIf([商品名]='商品A',1,0)*[売上数]) AS 商品名A数,
"商品名B" AS 商品名B,
Sum(IIf([商品名]='商品B',1,0)*[売上数]) AS 商品名B数
FROM テーブル
GROUP BY 会員番号, "商品名A", "商品名B";

投稿日時 - 2013-06-27 00:03:41

お礼

御礼が遅くなりまして申し訳ございません。

アドバイスいただいたとおり、
クロス集計で出すのが、一番期待通りの形になりました。

このたびはどうもありがとうございました。

投稿日時 - 2013-07-01 23:25:21

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

未試験なのでちょっとおかしいかも。

select tbl1.会員番号, tbl2.商品 as 商品A, tbl2.売上数A as 売上数A,
, tbl3.商品 as 商品B, tbl3.売上数 as 売上数B
from (テーブル as tbl1 left join
(select 会員番号, 商品, sum(売上数) from テーブル where 商品名 = "商品A" group by 会員番号) as tbl2 on tbl1.会員番号 = tbl2.会員番号)
left join
(select 会員番号, 商品, sum(売上数) from テーブル where 商品名 = "商品B" group by 会員番号) as tbl3 on tbl1.会員番号 = tbl3.会員番号
;

投稿日時 - 2013-06-26 21:57:18

お礼

御礼が遅くなりましてすいませんでした。
ご回答いただきありがとうございます。

やりたいことはいただいたSQLの通りなのですが、
試してみたところ、「あいまいな外部結合」とのエラーが出てしまいました。

すぐに結果をお知らせできず、申し訳ありません。

投稿日時 - 2013-07-01 23:23:39

あなたにオススメの質問