读书人

请问行转列,多谢

发布时间: 2013-02-02 12:27:16 作者: rapoo

请教行转列,谢谢
公司 月份 人数 价格
a 1 2 5
a 2 3 3
b 1 3 5
b 1 3 5



公司 1月份人数 2月份人数 1月份价格 2月份价格
a 2 3 5 3
b 6 0 10 0
[解决办法]


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
*/

读书人网 >SQL Server

热点推荐