一、题目
有一张成绩表grade
有name,course,score三个字段
具体数据如下

二、题目要求
现在要求查询返回以下形式的数据

三、实现
原表数据是每科成绩都是以行展示
题目要求的数据是每科成绩以列展示
可以用三个case when来实现
case when course = '语文' then score end as Chinese_grade
case when course = '数学' then score end as math_grade
case when course = '英语' then score end as english_grade
效果如下

但是每个人的成绩还是有三条,需要用分组函数,再对成绩取最大值
select
name,
max(case when course = '语文' then score end) as Chinese_grade,
max(case when course = '数学' then score end) as math_grade,
max(case when course = '英语' then score end) as english_grade
from grade
group by name;
如果case when语句case when course = '语文' then score end as Chinese_grade 加一个else:
case when course = '语文' then score else 0 end as Chinese_grade
那也可以用sum进行求和
四、由二的数据变为一里面的数据(列转行)
select
name,
course,
score
from
(
select name, '语文' as course,Chinese_grade as score from grade
Union all
select name, '数学' as course,math_grade as score from grade
Union all
select name, '英语' as course,english_grade as score from grade
)
order by name