有张学生表
S# SName
1 小美
2 小坡
3 李明
…
有张课程
C# Cname
01 语文
02 数学
03 英语
有张成绩表
S# C# Score
1 01 98
1 02 85
1 03 56
2 01 100
2 02 56
2 03 65
3 01 60
3 02 56
3 03 45
用SQL语句写出所有学生的所有课程的成绩,
SQL语句如下:
select a.S# 学生编号, a.Sname 学生姓名,
max(case c.Cname when N'语文' then b.score else null end) [语文],
max(case c.Cname when N'数学' then b.score else null end) [数学],
max(case c.Cname when N'英语' then b.score else null end) [英语]
from Student a
left join SC b on a.S# = b.S#
left join Course c on b.C# = c.C#
group by a.S# , a.Sname
order by a.S#
得出的结果示例如下:
学生编号 学生姓名 语文 数学 英语
01 赵雷 80 90 99
02 钱电 70 60 80
03 孙风 80 80 80
我不明白的为什么上面的SQL语句能得到正确结果。
首先上面的SQL语句连接后,有个类似于这样的表
学生编号 学生姓名 课程 分数
01 小美 语文 20
01 小美 数学 30
01 小美 英语 40
02 小丽 语文 25
02 小丽 数学 35
02 小丽 英语 99
然后一条一条地执行表中的数据,第一条数据,确实是语文,可以得到语文分数
然后再执行第二个Case ,应该显示结果为null啊…好乱
我想知道 case语句是如何执行 得到正确结果的