###前提・実現したいこと
商品別に、2007年6月から8月までのそれぞれの月の販売額の推移を出し、7月と8月は前月に対して、増加・変化なし・減少のそれぞれについて、↑・→・↓でそれぞれ表現する表を作成したいです。
多々間違っている部分はあると思うのですが、とりあえず、以下の状態まで作成しました。
###発生している問題・エラーメッセージ
実行するとE.ProductIDが見つけられない旨のメッセージが表示されます。(おそらく下から4行目のもの)
サブクエリ同士の結合がうまくいっていないからなのでしょうか。
###途中段階でのコード(追記)
My
1 2SELECT 3 D.ProductID 4 ,D.ProductName 5 ,SUM(CASE WHEN B.年月 = '2007-06' THEN B.Price*B.Quantity ELSE 0 END) AS `6月販売金額` 6 ,SUM(CASE WHEN B.年月 = '2007-07' THEN B.Price*B.Quantity ELSE 0 END) AS `7月販売金額` 7 ,SUM(CASE WHEN B.年月 = '2007-08' THEN B.Price*B.Quantity ELSE 0 END) AS `8月販売金額` 8FROM 9 ( 10 SELECT 11 C.ProductID 12 ,A.Quantity 13 ,C.Price 14 ,SUBSTR(A.SaleDate, 1, 7) AS 年月 15 FROM 16 Sales AS A 17 INNER JOIN 18 Products AS C 19 ON A.ProductID = C.ProductID 20 WHERE 21 A.SaleDate BETWEEN '2007-06-01' AND '2007-08-31' 22 GROUP BY 23 C.ProductID 24 ,A.Quantity 25 ,C.Price 26 ,A.SaleDate 27 ORDER BY 28 C.ProductID 29 ) AS B 30 INNER JOIN 31 Products AS D 32 ON B.ProductID = D.ProductID 33GROUP BY 34 D.ProductID 35ORDER BY 36 D.ProductID 37; 38```以上のコードで 39ProductID,ProductName,"6月販売金額","7月販売金額","8月販売金額"を抽出することができます。 40###ソースコード 41 42```My SQL 43SELECT 44 P.ProductID 45 ,P.ProductName 46 ,E."6月販売金額" 47 ,E."7月販売金額" 48 ,CASE WHEN E."6月販売金額" > E."7月販売金額" THEN "↓" 49 WHEN E."6月販売金額" = E."7月販売金額" THEN "→" 50 ELSE "↑" END AS "対6月増減" 51 ,E."8月販売金額" 52 ,CASE WHEN E."7月販売金額" > E."8月販売金額" THEN "↓" 53 WHEN E."7月販売金額" = E."8月販売金額" THEN "→" 54 ELSE "↑" END AS "対7月増減" 55 FROM 56 ( 57 SELECT 58 W.ProductID 59 ,SUBSTR(Q.SaleDate, 1, 7) AS 年月 60 FROM 61 Sales AS Q 62 INNER JOIN 63 Products AS W 64 WHERE 65 Q.SaleDate BETWEEN '2007-06-01' AND '2007-08-31' 66 ) AS B 67 INNER JOIN 68 ( 69 SELECT 70 D.ProductID 71 ,SUM(CASE WHEN B.年月 = '2007-06' THEN D.Price*C.Quantity ELSE 0 END) AS "6月販売金額" 72 ,SUM(CASE WHEN B.年月 = '2007-07' THEN D.Price*C.Quantity ELSE 0 END) AS "7月販売金額" 73 ,SUM(CASE WHEN B.年月 = '2007-08' THEN D.Price*C.Quantity ELSE 0 END) AS "8月販売金額" 74 FROM 75 Sales AS C 76 INNER JOIN 77 Products AS D 78 ON C.ProductID = D.ProductID 79 GROUP BY 80 D.ProductID 81 ) AS E 82 ON B.ProductID = E.ProductID 83 INNER JOIN 84 Products AS P 85 ON E.ProductID = P.ProductID 86ORDER BY 87 P.ProductID 88;
###補足情報(言語/FW/ツール等のバージョンなど)
出力項目:ProductID、ProductName、6月販売金額、7月販売金額、対6月増減、8月販売金額、対7月増減
出力順:ProductID
クロス集計を使用したい
NameをGROUP BYしたくない
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/10 05:57
退会済みユーザー
2016/02/10 06:04
2016/02/10 06:19
退会済みユーザー
2016/02/10 06:44 編集
2016/02/10 07:02
2016/02/10 11:21