在Microsoft SQL Server 2008中,如何将一张表的某列字段的值转换为列名称?
如下表:部门客户费用名称金额Aa手机费10Aa办公费11Aa公交费9Ab手机费10Ab办公费10Ac公交费10Bd手机费10Bd办公费10Be公交费10Bf手机费10Bf...
如下表:
部门 客户 费用名称 金额
A a 手机费 10
A a 办公费 11
A a 公交费 9
A b 手机费 10
A b 办公费 10
A c 公交费 10
B d 手机费 10
B d 办公费 10
B e 公交费 10
B f 手机费 10
B f 办公费 10
B f 公交费 10
将上表转换成如下格式:
部门 客户 手机费 办公费 公交费
A a 10 11 9
A b 10 10
A c 10
B d 10 10
B e 10
B f 10 10 10
那位高手帮忙解决下,不胜感激! 展开
部门 客户 费用名称 金额
A a 手机费 10
A a 办公费 11
A a 公交费 9
A b 手机费 10
A b 办公费 10
A c 公交费 10
B d 手机费 10
B d 办公费 10
B e 公交费 10
B f 手机费 10
B f 办公费 10
B f 公交费 10
将上表转换成如下格式:
部门 客户 手机费 办公费 公交费
A a 10 11 9
A b 10 10
A c 10
B d 10 10
B e 10
B f 10 10 10
那位高手帮忙解决下,不胜感激! 展开
展开全部
创建表数据
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)
运行
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)
结果
说明,以上适用于sqlserver,这个适用于费用名称不确定的情况,如果你费用名称确定的话,可以这样
select 部门,客户,
sum(case when 费用名称='办公费' then 金额 else 0 end) 办公费,
sum(case when 费用名称='公交费' then 金额 else 0 end) 公交费,
sum(case when 费用名称='手机费' then 金额 else 0 end) 手机费
from test
group by 部门,客户
这个语句基本所有数据库适用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询