用SQL语句如何实现以下面所说的效果

liangzhunyu 2008-05-30 02:55:40
现在数据表A的数据记录如下

类型里固定是分类:学费,书费,杂费,考务费,办证费,其他. 

学生编号 类型 金额
A 学费 500
A 书费 250
B 学费 500
B 办证费 250
B 考务费 500
C 书费 250
C 办证费 250
... ..... ....
... ..... ....


现在想通过 select 语句筛选成下面这个格式

学生编号 学费 书费 杂费 考务费 办证费 其他
A 500 250 0 0 0 0
B 500 0 0 500 250 0
... ... ... ... ... ... ...
... ... ... ... ... ... ...
... ... ... ... ... ... ...


这个select语句不会写
...全文
67 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
newqq 2008-05-30
  • 打赏
  • 举报
回复
select 
wgzaaa 2008-05-30
  • 打赏
  • 举报
回复
create table #b(学生编号 varchar(1),类型 varchar(10),金额 int)
insert #b select
'A', '学费', 500 insert #b select
'A', '书费', 250 insert #b select
'B', '学费', 500 insert #b select
'B', '办证费', 250 insert #b select
'B', '考务费', 500 insert #b select
'C', '书费', 250 insert #b 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)办证费,
sum(case when 类型='其他' then 金额 else 0 end)其他
from #b group by 学生编号
lff642 2008-05-30
  • 打赏
  • 举报
回复


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 学习编号

Limpire 2008-05-30
  • 打赏
  • 举报
回复
--> 测试数据: #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
*/
Herb2 2008-05-30
  • 打赏
  • 举报
回复
select 
学生编号,
学费=sum(case when 类型='学费' then 金额 else 0 end),
...
from tb
group by 学生编号
chuifengde 2008-05-30
  • 打赏
  • 举报
回复
其他一行多一逗号
Herb2 2008-05-30
  • 打赏
  • 举报
回复
select 
学生编号,
学费=sum(case when 类型='学费' then 金额 else 0 end,学生编号
...
from tb
group by 学生编号
Limpire 2008-05-30
  • 打赏
  • 举报
回复
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 学生编号
chuifengde 2008-05-30
  • 打赏
  • 举报
回复
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 学生编号
lff642 2008-05-30
  • 打赏
  • 举报
回复
类型里固定是分类:学费,书费,杂费,考务费,办证费,其他.

那可以使用静态SQL语句.
lff642 2008-05-30
  • 打赏
  • 举报
回复

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)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧