SQL多行转多列

时间:2021-09-05 10:28:26

表内容:

姓名 课程 分数

张三 语文 74
张三 数学 83
张三 物理 93
张三 德语 null
李四 语文 74
李四 数学 84
李四 物理 94
李四 英语 80
想变成(得到如下结果): 
姓名 语文 数学 物理 英语 德语
---- ---- ---- ----
李四 74   84   94   ?  60

张三 74   83   93  80  ? 


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)  德语
from tb
group by 姓名