CASE表达式的一大优势在于能够判断表达式,在CASE表达式里面我们可以使用BETWEEN LIKE和< >等便利的谓词组合,以及能嵌套子查询的IN 和EXISTS谓词。
如下是一张资格培训学校的课程一览表CourseMaster 和一张管理每个月所设置课程的表OpenCourses。
课程一览表
开设的课程
想要用这两张表生成下面的表:
使用CASE语句进行
SELECT course_name, CASE WHEN course_id IN (SELECT course_id FROM opencourses WHERE MONTH = \'200706\') THEN \'O\' ELSE \'X\' END AS \'六月\' , CASE WHEN course_id IN (SELECT course_id FROM opencourses WHERE MONTH = \'200707\') THEN \'O\' ELSE \'X\' END AS \'七月\', CASE WHEN course_id IN (SELECT course_id FROM opencourses WHERE MONTH = \'200708\') THEN \'O\' ELSE \'X\' END AS \'八月\' FROM coursemaster;
思路:我们看整张表其实是一章Course信息的表,和之前的按照地区对男女的人数进行统计的题目是类似的,需要将列的内容转换为行的内容。仅仅是对每门课程在几月份进行开展进行了一个展示,并不需要使用统计和聚合,因此也不需要排序。月份增加的时候仅仅修改SELECT子句就可以了,扩展性比较好。