Kobarin's Development Blog

C#やASP.NETなどについての記録です。

SQLserverでクロス集計

SQLserver2005以降から対応していたようです。

Table1
会社名 契約数
Docono 1月 150
ua 1月 100
Shiftbank 1月 50
Docono 2月 200
ua 2月 130
Shiftbank 2月 80
Docono 3月 50
ua 3月 250
Shiftbank 3月 300
クロス集計結果
select *
 from [Table1]
 pivot
  (
   sum([契約数]) for [月] in ([1月],[2月],[3月])
  ) as pivottable
 order by 1
解説
「select *」
全カラムを出力する場合。限定する場合は「select [会社名], [1月], [2月]」。
「pivot ( sum([契約数])」
集計対象カラムと処理方法。平均の場合はavg()、カウントならcount()。
for [月] in ([1月],[2月],[3月]) )
生成するカラム。この例だと、月が増えた場合は追加する必要がある。