THEN 1 ELSE 0 END ELSE 1 END = 1 )
如果单纯使用Check: CONSTRAINT check_salary CHECK ( sex = '2' AND salary > 1000 ) 女职员的条件倒是符合了,男职员就无法输入了。
四,根据条件有选择的UPDATE。
例,有如下更新条件
1.工资5000以上的职员,工资减少10%
2.工资在2000到4600之间的职员,工资增加15%
很容易考虑的是选择执行两次UPDATE语句,如下所示
–条件1
UPDATE Personnel SET salary = salary * 0.9 WHERE salary >= 5000;
–条件2
UPDATE Personnel SET salary = salary * 1.15
WHERE salary >= 2000 AND salary < 4600;
UPDATE Personnel
SET salary =
CASE WHEN salary >= 5000 THEN salary * 0.9
WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15
ELSE salary END;
p_key
col_1
col_2
a
1
张三
b
2
李四
c
3
王五
假设有如上数据,需要把主键a和b相互交换。用Case函数来实现的话,代码如下
UPDATE SomeTable
SET p_key = CASE WHEN p_key = ‘a’ THEN ‘b’
WHEN p_key = ‘b’ THEN ‘a’ ELSE p_key END
WHERE p_key IN (‘a’, ‘b’);
–使用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;
学号(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
1.只选修一门课程的人,返回那门课程的ID
2.选修多门课程的人,返回所选的主课程ID
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
–条件2:选择多门课程的学生 SELECT std_id, class_id AS main_class FROM Studentclass WHERE main_class_flg = ‘Y’ ;
STD_ID MAIN_class
100 1
200 3
SELECT std_id,
CASE
WHEN COUNT(*) = 1 –只选择一门课程的学生的情况 THEN MAX(class_id)
ELSE
MAX(CASE WHEN main_class_flg = ‘Y’ THEN class_id ELSE NULL END )
END AS main_class
FROM Studentclass GROUP BY std_id;
STD_ID MAIN_class
100 1
200 3
300 4
400 5
500 6
WHEN 1 THEN ‘Right’
WHEN NULL THEN ‘Wrong’
END
在这个语句中When Null这一行总是返回unknown,所以永远不会出现Wrong的情况。因为这句实际表达的意思是
WHEN col_1 = NULL,这是一个错误的用法,这个时候我们应该选择用WHEN col_1 IS NULL。
七、小结
select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。
下面举个简单的例子来说明。例如表 students(id, name ,birthday, sex, grade),要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为,年级,男生数量,女生数量。如果不用select case when,为了将男女数量并列显示,统计起来非常麻烦,先确定年级信息,再根据年级取男生数和女生数,而且很容易出错。
GROUP BY grade;
参考:https://www.cnblogs.com/aipan/p/7770611.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211730.html 原文链接:https://javaforall.net