求一个关于case的sql语句

freeliu 2003-08-20 01:18:43
有一个表:
xuehao xingming kemu fenshu
1 张三 数学 84
1 张三 语文 70
1 张三 英语 90
...
想出一个报表,格式为
xuehao xingming shuxue yuwen yingyu ...
1 张三 84 70 90 ...
其中科目是不定的
用sql语句中的case怎么写?
记得以前论坛上有,但是我找不到了。请高手帮忙。
...全文
34 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeliu 2003-08-20
  • 打赏
  • 举报
回复
ok.谢谢大家。
flying120 2003-08-20
  • 打赏
  • 举报
回复
up pengdali(大力 V2.0)
happydreamer 2003-08-20
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select xuehao,'

select @sql = @sql + 'sum(case kemu when '''+kemu+'''
then fenshu else 0 end) as ['+kemu+'],'
from (select distinct kemu from 表) a

select @sql = left(@sql,len(@sql)-1) + ' from 表 group by xuehao'

exec(@sql)
pengdali 2003-08-20
  • 打赏
  • 举报
回复
create table 你的表(姓名 varchar(100),科目 varchar(100),成绩 int)
insert 你的表 values('n1','aa',11)
insert 你的表 values('n2','bb',1)
insert 你的表 values('n3','aa',45)
insert 你的表 values('n4','cc',81)
insert 你的表 values('n5','a',11)
insert 你的表 values('n6','aay',561)
insert 你的表 values('n7','a',14)

declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 科目 when '''+科目+''' then 成绩 else 0 end) ['+科目+']'
from (select distinct 科目 from 你的表) a

select @sql =@sql+' from 你的表 group by 姓名'

exec(@sql)

drop table 你的表
CrazyFor 2003-08-20
  • 打赏
  • 举报
回复
select xuehao,Xingming
,sum(case when kemu='数学' then fenshu else 0 end) shuxue
,sum(case when kemu='语文' then fenshu else 0 end) yuwen
,sum(case when kemu='英语' then fenshu else 0 end) yingyu
....
from table group by xuehao,Xingming



---------------------
科目不确定时
参考:
create table #(a varchar(100),b int)
insert # values('aa',11)
insert # values('bb',1)
insert # values('aa',45)
insert # values('cc',81)
insert # values('a',11)
insert # values('aay',561)
insert # values('a',14)

declare @sql varchar(8000)
set @sql = 'select '
select @sql = @sql + 'sum(case a when '''+a+'''
then b else 0 end) '+a+'的数量,'
from (select distinct a from #) as a

select @sql = left(@sql,len(@sql)-1) + ' from #'

exec(@sql)

drop table #
pengdali 2003-08-20
  • 打赏
  • 举报
回复
create table 你的表(姓名 varchar(100),学历 varchar(100),部门 int)
insert 你的表 values('n1','aa',11)
insert 你的表 values('n2','bb',1)
insert 你的表 values('n3','aa',45)
insert 你的表 values('n4','cc',81)
insert 你的表 values('n5','a',11)
insert 你的表 values('n6','aay',561)
insert 你的表 values('n7','a',14)

declare @sql varchar(8000)
set @sql = 'select 部门'
select @sql = @sql + ',sum(case 学历 when '''+学历+''' then 1 else 0 end) ['+学历+'的人数]'
from (select distinct 学历 from 你的表) a

select @sql =@sql+' from 你的表 group by 部门'

exec(@sql)

drop table 你的表
CrazyFor 2003-08-20
  • 打赏
  • 举报
回复
select xuehao,Xingming
,sum(case when kemu='数学' then fenshu else 0 end) shuxue
,sum(case when kemu='语文' then fenshu else 0 end) yuwen
,sum(case when kemu='英语' then fenshu else 0 end) yingyu
....
from table group by xuehao,Xingming


34,576

社区成员

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

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