34,576
社区成员
发帖
与我相关
我的任务
分享
select
select 学习编号,
学费 = max(case when 类型 ='学费' then 金额 else 0 end),
书费 = max(case when 类型 ='书费' then 金额 else 0 end),
杂费 = max(case when 类型 ='杂费' then 金额 else 0 end),
考务费 = max(case when 类型 ='考务费' then 金额 else 0 end),
办证费 = max(case when 类型 ='办证费' then 金额 else 0 end),
其他 = max(case when 类型 ='其他' then 金额 else 0 end)
from 表A
group by 学习编号
order by 学习编号
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (学生编号 varchar(11),类型 varchar(11),金额 int)
insert into #T
select 'A','学费',500 union all
select 'A','书费',250 union all
select 'B','学费',500 union all
select 'B','办证费',250 union all
select 'B','考务费',500 union all
select 'C','书费',250 union all
select 'C','办证费',250
select
学生编号,
学费=sum(case 类型 when '学费' then 金额 else 0 end),
书费=sum(case 类型 when '书费' then 金额 else 0 end),
杂费=sum(case 类型 when '杂费' then 金额 else 0 end),
考务费=sum(case 类型 when '考务费' then 金额 else 0 end),
办证费=sum(case 类型 when '办证费' then 金额 else 0 end),
其他=sum(case 类型 when '其他' then 金额 else 0 end)
from #T
group by 学生编号
/*
学生编号 学费 书费 杂费 考务费 办证费 其他
----------- ----------- ----------- ----------- ----------- ----------- -----------
A 500 250 0 0 0 0
B 500 0 0 500 250 0
C 0 250 0 0 250 0
*/
select
学生编号,
学费=sum(case when 类型='学费' then 金额 else 0 end),
...
from tb
group by 学生编号
select
学生编号,
学费=sum(case when 类型='学费' then 金额 else 0 end,学生编号
...
from tb
group by 学生编号
select
学生编号,
学费=sum(case 类型 when '学费' then 金额 else 0 end),
书费=sum(case 类型 when '书费' then 金额 else 0 end),
杂费=sum(case 类型 when '杂费' then 金额 else 0 end),
考务费=sum(case 类型 when '考务费' then 金额 else 0 end),
办证费=sum(case 类型 when '办证费' then 金额 else 0 end),
其他=sum(case 类型 when '其他' then 金额 else 0 end)
from 表
group by 学生编号
select
学生编号,
学费=sum(类型='学费' then 金额 else 0 end),
书费=sum(类型='书费' then 金额 else 0 end),
杂费=sum(类型='杂费' then 金额 else 0 end),
考务费=sum(类型='考务费' then 金额 else 0 end),
办证费=sum(类型='办证费' then 金额 else 0 end),
其他=sum(类型='其他' then 金额 else 0 end),
from [表]
group by 学生编号
declare @sql varchar(8000)
set @sql = 'select 学生编号'
select @sql = @sql + ',max(case when 类型 = '''+类型+''' then 金额 else 0 end) ['+类型+']'
from 表A group by 类型
set @sql = @sql +' from 表A group by 学生编号 order by 学生编号'
--print(@sql)
exec(@sql)