首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问行转列,多谢

2013-02-02 
请教行转列,谢谢公司 月份人数价格a125a233b135b135变公司1月份人数 2月份人数1月份价格 2月份价格a2353b6

请教行转列,谢谢
公司 月份  人数  价格
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
*/

热点排行