###前提・実現したいこと
クロス集計を使って月別・カテゴリ別の合計販売額を一覧にして各月ごと1行にまとめ、カテゴリは1から10までIDごとに集計して横に並べて表示したい。
###発生している問題・エラーメッセージ
My SQLで以下のコードを実行すると、B.SaleDateをGROUP BYに入れる必要がある旨のメッセージが表示されます。
しかし、ここでGROUP BYをしたいのは年月日まで抽出されるSaleDateではなく、年月を抽出したSUBSTR(B.SaleDate, 1, 7)なので、うまくグループ化できずに困っています。
###ソースコード
My SQL もしくは SUBSTRをMidに変換してAccess
SELECT
SUBSTR(B.SaleDate, 1, 7) AS 年月
,SUM(CASE WHEN A.CategoryID = 1 THEN A.Price * B.Quantity ELSE 0 END) AS Ct1
,SUM(CASE WHEN A.CategoryID = 2 THEN A.Price * B.Quantity ELSE 0 END) AS Ct2
,SUM(CASE WHEN A.CategoryID = 3 THEN A.Price * B.Quantity ELSE 0 END) AS Ct3
,SUM(CASE WHEN A.CategoryID = 4 THEN A.Price * B.Quantity ELSE 0 END) AS Ct4
,SUM(CASE WHEN A.CategoryID = 5 THEN A.Price * B.Quantity ELSE 0 END) AS Ct5
,SUM(CASE WHEN A.CategoryID = 6 THEN A.Price * B.Quantity ELSE 0 END) AS Ct6
,SUM(CASE WHEN A.CategoryID = 7 THEN A.Price * B.Quantity ELSE 0 END) AS Ct7
,SUM(CASE WHEN A.CategoryID = 8 THEN A.Price * B.Quantity ELSE 0 END) AS Ct8
,SUM(CASE WHEN A.CategoryID = 9 THEN A.Price * B.Quantity ELSE 0 END) AS Ct9
,SUM(CASE WHEN A.CategoryID = 10 THEN A.Price * B.Quantity ELSE 0 END) AS Ct10
FROM
Products AS A
INNER JOIN
Sales AS B
ON A.ProductID = B.ProductID
GROUP BY
SUBSTR(B.SaleDate, 1, 7)
ORDER BY
SUBSTR(B.SaleDate, 1, 7)
;
###補足情報
SaleDate, Quantity →Salesテーブル
CategoryID, Price →Productsテーブル
出力項目:年月、Ct1、Ct2、Ct3、Ct4、Ct5、Ct6、Ct7、Ct8、Ct9、Ct10
出力順:年月
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/10 00:48