问题描述:求对一个数据表进行行列转换的语句。
表格数据示例:
姓名 课程 期中分数 期末分数 作业分数
a 语文 80 70 90
a 数学 90 80 90
b 语文 70 80 80
b 数学 90 80 80
结果:
姓名 语文期中分数 语文期末分数 语文作业分数 数学期中分数 数学期末分数 数学作业分数
a 80 70 90 90 80 90
b 70 80 80 90 80 80
能否使用PIVOT?
除了常规的CASE外,是否还有更有效的的方法?
select
姓名,
sum(case 课程 when 语文 then 其中分数 else 0 end) as 语文期中分数,
sum(case 课程 when 语文 then 期末分数 else 0 end) as 语文期末分数,
sum(case 课程 when 语文 then 作业分数 else 0 end) as 语文作业分数,
sum(case 课程 when 数学 then 其中分数 else 0 end) as 数学期中分数,
sum(case 课程 when 数学 then 期末分数 else 0 end) as 数学期末分数,
sum(case 课程 when 数学 then 作业分数 else 0 end) as 数学作业分数
from .....
group by 姓名
如果动态的,写一个存储过程,写个临时表把“课目,姓名”group by 出来后,就容易了。