sql中case语句的用法浅谈

2020-07-06 05:43:22易采站长站整理


要实现下面这个功能,可以使用下面两条语句

–使用IN的时候


SELECT keyCol,


CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )


THEN ‘Matched’


ELSE ‘Unmatched’ END Label


FROM tbl_A;


–使用EXISTS的时候


SELECT keyCol,


CASE WHEN EXISTS ( SELECT * FROM tbl_B


WHERE tbl_A.keyCol = tbl_B.keyCol )


THEN ‘Matched’


ELSE ‘Unmatched’ END Label


FROM tbl_A;


使用IN和EXISTS的结果是相同的。也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。


六,在Case函数中使用合计函数


假设有下面一个表


学号(std_id) 课程ID(class_id) 课程名(class_name) 主修flag(main_class_flg)


100 1 经济学Y


100 2 历史学N


200 2 历史学N


200 3 考古学Y


200 4 计算机N


300 4 计算机N


400 5 化学N


500 6 数学N


有的学生选择了同时修几门课程(100,200)也有的学生只选择了一门课程(300,400,500)。选修多门课程的学生,要选择一门课程作为主修,主修flag里面写入Y。只选择一门课程的学生,主修flag为N(实际上要是写入Y的话,就没有下面的麻烦事了,为了举例子,还请多多包含)。


现在我们要按照下面两个条件对这个表进行查询


只选修一门课程的人,返回那门课程的ID


选修多门课程的人,返回所选的主课程ID


简单的想法就是,执行两条不同的SQL语句进行查询。


条件

–条件:只选择了一门课程的学生


SELECT std_id, MAX(class_id) AS main_class


FROM Studentclass


GROUP BY std_id


HAVING COUNT(*) = 1;


执行结果


STD_ID   MAIN_class


——   ———-


300      4


400      5


500      6


条件

–条件:选择多门课程的学生


SELECT std_id, class_id AS main_class


FROM Studentclass


WHERE main_class_flg = ‘Y’ ;


执行结果


STD_ID  MAIN_class


——  ———-


100     1


200     3


如果使用Case函数,我们只要一条SQL语句就可以解决问题,具体如下所示

SELECT  std_id,


CASE WHEN COUNT(*) = 1  –只选择一门课程的学生的情况


THEN MAX(class_id)


ELSE MAX(CASE WHEN main_class_flg = ‘Y’

相关文章 大家在看