集計表の外部結合
SQL文について勉強中ですが、集計のやり方が分からないためお教えください。
SQL SERVER2008r2
Management StudioでSQLを書いてます。
◎TM部門(店舗マスタ)
店舗CD
店舗名
◎TM店舗部門(店舗部門マスタ)
店舗部門CD
店舗部門名
◎TT売上伝票(売上伝票)
伝票番号
行
店舗CD
店舗部門CD
売上日
売上時間
商品CD
商品名
数量
税抜単価
税込単価
税抜金額
税込金額
消費税
伝票合計
上記テーブルがあり、日付を限定して集計したいのですが、うまくSQLが書けません。
【希望結果例】
集計期間:2014/04/20 ~ 2014/05/20
日付 | 店舗名 |店舗部門名 | 日別合計
2014/05/21 | 店舗A | 店舗部門A | sum(伝票合計)
2014/05/21 | 店舗A | 店舗部門B | sum(伝票合計)
2014/05/21 | 店舗A | 店舗部門C | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門D | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門E | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門F | sum(伝票合計)
~
SELECT
伝票日付,
店舗CD,
店舗部門CD,
SUM(伝票合計) AS 日別合計
FROM TT売上伝票
GROUP BY 伝票日付,店舗CD,店舗部門CD
HAVING 伝票日付 BETWEEN '2014-04-21' AND '2014-05-20' AND 店舗CD IN(1,2,3,4)
ORDER BY 伝票日付,店舗CD,店舗部門CD
上記の結果
日付 | 店舗CD |店舗部門CD | 日別合計
2014/05/21 | 店舗A | 店舗部門A | sum(伝票合計)
2014/05/21 | 店舗A | 店舗部門B | sum(伝票合計)
2014/05/21 | 店舗A | 店舗部門C | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門D | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門E | sum(伝票合計)
2014/05/21 | 店舗B | 店舗部門F | sum(伝票合計)
集計は全く問題ないのですが、ここからリレーションし、店舗名、店舗部門名を表示したいのですが、書き方が分かりません。
無知ながら、下記方法を試しました結果
SELECT
TT売上伝票.店舗CD,
TM店舗.店舗名,
TT売上伝票.店舗部門CD,
TM店舗部門.店舗部門名
FROM TT売上伝票
JOIN TM店舗
ON TM店舗.店舗CD=TT売上伝票.店舗CD
JOIN TM店舗部門
ON TM店舗部門.店舗部門CD=TT売上伝票.店舗部門CD
UNION ALL
SELECT
伝票日付,
店舗CD,
店舗部門CD,
SUM(伝票合計) AS 日別合計
FROM TT売上伝票
GROUP BY 伝票日付,店舗CD,店舗部門CD
HAVING 伝票日付 BETWEEN '2014-04-21' AND '2014-05-20' AND 店舗CD IN(1,2,3,4)
ORDER BY 伝票日付,店舗CD,店舗部門CD
エラーメッセージ
ステートメントが UNION、INTERSECT、EXCEPT のいずれかの演算子を含んでいるときは、選択リスト内に ORDER BY 項目が必要です。
無知ながら、UNION演算子でやる方法と、サブクリエを使う方法があるのではと思いますが、出来れば利点と欠点を含めてお教え頂けたら幸いです。
お礼
ご回答ありがとうございました。 これは他でも流用できそうで助かりました。