句:
SELECT stu_name, exam_date,
CASEWHEN exam_sub = '语文' THENexam_score
ELSE NULL
ENDAS 语文,
CASEWHEN exam_sub = '数学' THENexam_score
ELSE NULL
ENDAS 数学,
CASEWHEN exam_sub = '英语' THENexam_score
ELSE NULL
ENDAS 英语
FROM exams;
上面语句将得到如表12-24所示的结果。
表12-24 使用CASE表达式得到的结果
stu_name |
exam_date |
语文 |
数学 |
英语 |
张三 |
2009-06-20 |
90 |
NULL |
NULL |
张三 |
2009-06-20 |
NULL |
95 |
NULL |
张三 |
2009-06-20 |
NULL |
NULL |
100 |
张三 |
2009-09-20 |
85 |
NULL |
NULL |
张三 |
2009-09-20 |
NULL |
90 |
NULL |
张三 |
2009-09-20 |
NULL |
NULL |
98 |
李四 |
2009-06-20 |
80 |
NULL |
NULL |
李四 |
2009-06-20 |
NULL |
85 |
NULL |
李四 |
2009-06-20 |
NULL |
NULL |
90 |
李四 |
2009-09-20 |
75 |
NULL |
NULL |
李四 |
2009-09-20 |
NULL |
80 |
NULL |
李四 |
2009-09-20 |
NULL |
NULL |
88 |
由上表可以看出,只要按stu_name、exam_date分组计算最大值,就可以得到表12-23所要求的计算结果。参考下面的语句:
SELECT stu_name, exam_date,
MAX(CASE WHEN exam_sub = '语文' THEN exam_score
ELSE NULL
END) AS 语文,
MAX(CASE WHEN exam_sub = '数学' THEN exam_score
ELSE NULL
END) AS 数学,
MAX(CASE WHEN exam_sub = '英语' THEN exam_score
ELSE NULL
END) AS 英语
FROM exams
GROUP BY stu_name, exam_date
ORDER BY stu_name, exam_date;