SQLServerのCASE WHENを上手く使えば年月ごとのデータを振り分けて取得することができます。
CASE WHENを使って年月ごとのデータを取得する
SQLServerのCASE WHEN はIF文の変りに条件を書くことができ、SELECT句の中にも書ける便利な書式です。
CASE WHENの書式
CASE WHEN 条件式 THEN 成立時の値 ELSE 不成立時の値 END
CASE WHEN 条件式 THEN 成立時の値 ELSE 不成立時の値 END
実際に年月で振り分けるには対象の年月を100で割った余りを使います。
SELECT 得点結果.年月 ,CASE WHEN 得点結果.年月%100= 1 THEN SUM(得点結果.得点) ELSE 0 END AS '1月の総得点' ,CASE WHEN 得点結果.年月%100= 2 THEN SUM(得点結果.得点) ELSE 0 END AS '2月の総得点' ,CASE WHEN 得点結果.年月%100= 3 THEN SUM(得点結果.得点) ELSE 0 END AS '3月の総得点' ,CASE WHEN 得点結果.年月%100= 4 THEN SUM(得点結果.得点) ELSE 0 END AS '4月の総得点' ,CASE WHEN 得点結果.年月%100= 5 THEN SUM(得点結果.得点) ELSE 0 END AS '5月の総得点' ,CASE WHEN 得点結果.年月%100= 6 THEN SUM(得点結果.得点) ELSE 0 END AS '6月の総得点' ,CASE WHEN 得点結果.年月%100= 7 THEN SUM(得点結果.得点) ELSE 0 END AS '7月の総得点' ,CASE WHEN 得点結果.年月%100= 8 THEN SUM(得点結果.得点) ELSE 0 END AS '8月の総得点' ,CASE WHEN 得点結果.年月%100= 9 THEN SUM(得点結果.得点) ELSE 0 END AS '9月の総得点' ,CASE WHEN 得点結果.年月%100=10 THEN SUM(得点結果.得点) ELSE 0 END AS '10月の総得点' ,CASE WHEN 得点結果.年月%100=11 THEN SUM(得点結果.得点) ELSE 0 END AS '11月の総得点' ,CASE WHEN 得点結果.年月%100=12 THEN SUM(得点結果.得点) ELSE 0 END AS '12月の総得点' FROM ( SELECT 202001 AS 年月 , 10 AS 得点 UNION ALL SELECT 202002 AS 年月 , 20 AS 得点 UNION ALL SELECT 202003 AS 年月 , 30 AS 得点 UNION ALL SELECT 202004 AS 年月 , 40 AS 得点 UNION ALL SELECT 202005 AS 年月 , 50 AS 得点 UNION ALL SELECT 202006 AS 年月 , 60 AS 得点 UNION ALL SELECT 202007 AS 年月 , 70 AS 得点 UNION ALL SELECT 202008 AS 年月 , 80 AS 得点 UNION ALL SELECT 202009 AS 年月 , 90 AS 得点 UNION ALL SELECT 202010 AS 年月 ,100 AS 得点 UNION ALL SELECT 202011 AS 年月 ,110 AS 得点 UNION ALL SELECT 202012 AS 年月 ,120 AS 得点 ) AS 得点結果 GROUP BY 得点結果.年月
実行結果は
202001 10 0 0 0 0 0 0 0 0 0 0 0 202002 0 20 0 0 0 0 0 0 0 0 0 0 202003 0 0 30 0 0 0 0 0 0 0 0 0 202004 0 0 0 40 0 0 0 0 0 0 0 0 202005 0 0 0 0 50 0 0 0 0 0 0 0 202006 0 0 0 0 0 60 0 0 0 0 0 0 202007 0 0 0 0 0 0 70 0 0 0 0 0 202008 0 0 0 0 0 0 0 80 0 0 0 0 202009 0 0 0 0 0 0 0 0 90 0 0 0 202010 0 0 0 0 0 0 0 0 0 100 0 0 202011 0 0 0 0 0 0 0 0 0 0 110 0 202012 0 0 0 0 0 0 0 0 0 0 0 120
こんな感じになります。