如何用sql实现横向显示成绩功能?

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:54:09
原始成绩表的内容如下
姓名 课程 成绩
张三 语文 80
张三 数学 70
张三 英语 60
李四 语文 50
李四 数学 40
李四 英语 90
我想这样显示
姓名 语文 数学 英语
张三 80 70 60
李四 50 40 90

select a.姓名,
sum(case when 课程='语文' then a.成绩 else 0 end)
sum(case when 课程='数学' then a.成绩 else 0 end)
sum(case when 课程='英语' then a.成绩 else 0 end)
from
(select 姓名,课程,max(成绩) 成绩
from 成绩表
group by 姓名,课程) a
group by a.姓名

--一个简单的行列转换
--(test 是表的名字)
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 课程 when '''+课程+''' then 成绩 end) ['+课程+']'
from (select distinct 课程 from test) as a

select @sql = @sql+' from test group by 姓名'

exec(@sql)