プロが教える店舗&オフィスのセキュリティ対策術

SQL文について教えて頂ければとおもいます。
VB2005とAccess2007を組み合わせて下記を作っています。

売上テーブルには下記のレコードが入っています。
売上日、商品、数量
4/10  商品A  2
4/10  商品B  3
4/10  商品A  2
4/10  商品C  1
4/10  商品B  1
4/11  商品A  1
4/11  商品B  2
4/11  商品C  3
4/11  商品C  2
4/11  商品A  2
4/11  商品B  4

商品は3種類しかなく、日付ごとの3種類の売り上げ数量を1行に表示したく、
COUNT やGROUP BYを組み合わせていろいろ試行錯誤していますが、
うまくいきません。

イメージは下記になります。
日付 商品A 商品B 商品C
4/10  4     4    1
4/11  3     6    5

そもそもSQLでは上記のイメージにできないのでしょうか?
ご回答よろしくお願いします。

A 回答 (1件)

商品が質問文の3種類しかないのであれば、以下のように書けば期待するイメージにはなります。


(手元にAccessがないので、このままで動くかどうかわかりません。LibreOffice Base では動きました)

SELECT
t0.売上日 AS 日付,
NVL(t1.売上数, 0) AS 商品A,
NVL(t2.売上数, 0) AS 商品B,
NVL(t3.売上数, 0) AS 商品C
FROM
(SELECT DISTINCT 売上日 FROM 売上) t0
LEFT OUTER JOIN
(SELECT 売上日, SUM(数量) AS 売上数 FROM 売上 WHERE 商品 = '商品A' GROUP BY 売上日) t1
ON t1.売上日 = t0.売上日
LEFT OUTER JOIN
(SELECT 売上日, SUM(数量) AS 売上数 FROM 売上 WHERE 商品 = '商品B' GROUP BY 売上日) t2
ON t2.売上日 = t0.売上日
LEFT OUTER JOIN
(SELECT 売上日, SUM(数量) AS 売上数 FROM 売上 WHERE 商品 = '商品C' GROUP BY 売上日) t3
ON t3.売上日 = t0.売上日
ORDER BY t0.売上日

商品の種類が多かったり可変の場合は対応できません。
    • good
    • 1
この回答へのお礼

ありがとうございました。
大変参考になりました。
希望の表示ができました。

お礼日時:2015/04/22 17:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!