在Microsoft SQL Server 2008中,将一张表的某列的值转换为列名称

来源:互联网 发布:硬盘 检测 软件 编辑:程序博客网 时间:2024/06/05 00:00

步骤一:创建测试表

create table test
(部门 varchar(10),
客户 varchar(10),
费用名称 varchar(10),
金额 int

)

步骤二:插入测试数据

insert into test values ('A','a','手机费',10)
insert into test values ('A','a','办公费',11)
insert into test values ('A','a','公交费',9)
insert into test values ('A','b','手机费',10)
insert into test values ('A','b','办公费',10)
insert into test values ('A','c','公交费',10)
insert into test values ('B','d','手机费',10)
insert into test values ('B','d','办公费',11)
insert into test values ('B','e','公交费',9)
insert into test values ('B','f','手机费',10)
insert into test values ('B','f','办公费',10)
insert into test values ('B','f','公交费',10) 

select * from test

步骤三:实现行列转换(基于费用名称列)

declare @sql varchar(4000)
set @sql = 'select [部门],[客户]'

select @sql = @sql + ',sum(isnull(case [费用名称] when '''+[费用名称]+''' then [金额] end,0)) as 
['+[费用名称]+']'
from (select distinct [费用名称] from [test]) as a
select @sql = @sql+' from [test] group by [部门],[客户]'


exec(@sql) 

 

0 0