前段时间做项目过程中制作报表时编写的sql需要用到的case when then else end,因此将case的用法总结一下吧。
CASE命令有两种语句格式:
语法形式1:CASE
expression
WHEN expression_11 THEN
expression_12
…
WHEN
expression_n1 THEN
expression_n2
[ELSE
expression_m]
END
该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不包含ELSE子句时,如果所有比较失败时,CASE语句将返回NULL。
【例】从数据表stud_info中,选取stud_id、grade,如果grade为“男”则输出“M”,如果为“女”输出“F”。
SELECT
stud_id, sex=CASE
gender
WHEN ’男’ THEN
’M’
WHEN ’女’ THEN
’F’
END
FROM stud_info
语法形式2:CASE WHEN condition_expression_1 THEN
expression_1
…
WHEN condition_expression_n THEN
expression_n
[ELSE
expression_m]
END
该语句的执行过程是:首先测试WHEN后的条件表达式的值,如果其值为真,则返回THEN后面的表达式的值,否则测试下一个WHEN子句中的表达式的值,如果所有WHEN子句后的表达式的值都为假,则返回ELSE后的表达式的值,如果在CASE语句中没有ELSE子句,则CASE表达式返回NULL。
注意:CASE命令可以嵌套到SQL语句中。
【例】从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”、小于60分输出“不及格”、60分至70分输出“及格”、70分至90分输出“良好”、大于或等于90分时输出“优秀”。
SELECT
stud_id,name,score=CASE WHEN grade IS NULL THEN
’未考’
WHEN grade<60 THEN
’不及格’
WHEN grade>=60 AND grade<70 THEN
’及格’
WHEN grade>=70 AND grade<90 THEN
’良好’
WHEN grade>=90 THEN
’优秀’
END
FROM stud_grade
原文:http://www.cnblogs.com/snowYang/p/3546195.html