您没有指定您使用的 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 Fiddle
如果您使用的是 SQL Server 2005+ 或 Oracle 11g,那么您可以使用以下PIVOT
功能:
select *
from
(
select id, name, month, [count]
from yourtable
) src
pivot
(
sum([count])
for month in (December2012, January2013)
) piv
请参阅SQL Fiddle with Demo。
在 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 Fiddle
所有版本都会产生结果:
| ID | NAME | DECEMBER2012 | JANUARY2013 |
-------------------------------------------
| 1 | David | 500 | 400 |
| 2 | Rob | 320 | 280 |