日期:2014-05-17 浏览次数:20474 次
select 公司,
sum(case when 月份=1 then 人数 else 0 end)as 1月份人数,
sum(case when 月份=2 then 人数 else 0 end)as 2月份人数,
sum(case when 月份=1 then 价格 else 0 end)as 1月份价格,
sum(case when 月份=2 then 价格 else 0 end)as 2月份价格
from 表名 group by 公司
USE test
GO
-->生成表tb
if object_id('tb') is not null
drop table tb
Go
Create table tb([公司] nvarchar(1),[月份] smallint,[人数] smallint,[价格] smallint)
Insert into tb
Select N'a',1,2,5
Union all Select N'a',2,3,3
Union all Select N'b',1,3,5
Union all Select N'b',1,3,5
DECLARE @sql NVARCHAR(MAX)
SELECT @sql=ISNULL(@sql+',','')
+N'SUM(Case when [月份]='+LTRIM([月份])+N' Then [人数] Else 0 End) As [人数'+LTRIM([月份])+']'
FROM tb
GROUP BY [月份]
SELECT @sql=ISNULL(@sql+',','')
+N'SUM(Case when [月份]='+LTRIM([月份])+N' Then [价格] Else 0 End) As [价格'+LTRIM([月份])+']'
FROM tb
GROUP BY [月份]
Exec (N'Select [公司],'+@sql+N' From tb Group by [公司]')
/*
公司 人数1 人数2 价格1 价格2
---- ----------- ----------- ----------- -----------
a 2 3 5 3
b 6 0 10 0
*/