質問: '01' GROUP BY A.得意先コード,ms.得意先名1 ORDER BY A.得意先コード ``` ここから更に発展で前年度の月別対比を集計するにはどのようにしてすればよいのでしょうか? 色々と検索してみましたが当方がわかる内容がヒットしなかったので質問させていただきます。 イメージとしては下記のような表組みをイメージしております。 4月5月6月7月8月9月10月11月12月1月2月3月 得意先名 2014年度 2015年度 得意先名 2014年度 2015年度 得意先名 2014年度 2015年度 下記のようにすれば出せないことも無いのですが・・・ もっとスマートなやり方を知りたいです。 ``` , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201501' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年1月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201601' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年1月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201502' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年2月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201602' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年2月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201503' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年3月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201603' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年3月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201504' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年4月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201604' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年4月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201505' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年5月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201605' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年5月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201506' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年6月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201606' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年6月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201507' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年7月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201607' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年7月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201508' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年8月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201608' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年8月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201509' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年9月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '201609' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年9月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2015010' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年10月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2016010' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年10月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2015011' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年11月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2016011' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年11月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2015012' THEN A.伝票合計売上金額 ELSE 0 END) AS "前年12月" , SUM(CASE SUBSTRING(A.売上見出日付,1,6) WHEN '2016012' THEN A.伝票合計売上金額 ELSE 0 END) AS "今年12月" ```
回答: SQLServerはPivot句をサポートしているようですので、それを使うのが簡単かも知れません。 SQL ServerのPIVOT句・UNPIVOT句 > > 動的SQLにすると、いくら種類が増えても修正する必要はなくなります。 > > 上記のSQLを動的SQLに修正したものは下記のとおりになります。 > > > 参考ページの上記引用部分周囲のコードが参考になると思います。