使用しているRDBMSを指定していません。次の式を使用した集計関数を使用して、すべてのデータベースのデータをピボットできます。CASE
select id, name,
sum(case when month = 'December2012' then "count" end) December2012,
sum(case when month = 'January2013' then "count" end) January2013
from yourtable
group by id, name
SQL FiddlewithDemoを参照してください
SQL Server2005+またはOracle11gを使用している場合は、次のPIVOT
関数を使用できます。
select *
from
(
select id, name, month, [count]
from yourtable
) src
pivot
(
sum([count])
for month in (December2012, January2013)
) piv
SQL FiddlewithDemoを参照してください。
SQL Serverでは、の値month
が不明な場合は、次のような動的SQLを使用できます。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(month)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, name,' + @cols + ' from
(
select id, name, month, [count]
from yourtable
) x
pivot
(
sum([count])
for month in (' + @cols + ')
) p '
execute(@query)
SQL FiddlewithDemoを参照してください
すべてのバージョンで次の結果が得られます。
| ID | NAME | DECEMBER2012 | JANUARY2013 |
-------------------------------------------
| 1 | David | 500 | 400 |
| 2 | Rob | 320 | 280 |