原表如下:
列转行:
select 姓名,
MAX(CASE 课程 when '语文' then 分数 else 0 END) 语文,
MAX(CASE 课程 when '数学' then 分数 else 0 END) 数学,
MAX(CASE 课程 when '物理' then 分数 else 0 END) 物理
from 成绩
GROUP BY 姓名
得到如下结果:
反过来,行转列:
select * from (
select 姓名,'语文' 课程, 语文 分数 from 成绩2 UNION
select 姓名,'数学' 课程, 数学 分数 from 成绩2 UNION
select 姓名,'物理' 课程, 物理 分数 from 成绩2 ) t
ORDER BY 姓名,case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end