SQLServerのCASE WHENを使って年月ごとのデータを取得する

SQLServerのCASE WHENを上手く使えば年月ごとのデータを振り分けて取得することができます。

スポンサーリンク

CASE WHENを使って年月ごとのデータを取得する

SQLServerのCASE WHEN はIF文の変りに条件を書くことができ、SELECT句の中にも書ける便利な書式です。

CASE WHENの書式
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

こんな感じになります。

タイトルとURLをコピーしました