SqlServer中的Case When语句可以根据一些条件来返回不同的值,类似于其他编程语言中的if-else或switch-case结构。Case When语句有两种形式:简单形式和搜索形式。
简单形式的Case When语句如下:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
这种形式的Case When语句会将输入表达式与每个when表达式进行比较,如果相等,则返回对应的结果表达式。如果没有任何一个when表达式与输入表达式相等,且存在else结果表达式,则返回else结果表达式。如果没有任何一个when表达式与输入表达式相等,且不存在else结果表达式,则返回NULL。
例如,下面的语句会根据学生的成绩返回不同的等级:
SELECT name, score,
CASE score
WHEN 90 THEN 'A'
WHEN 80 THEN 'B'
WHEN 70 THEN 'C'
WHEN 60 THEN 'D'
ELSE 'E'
END AS grade
FROM student;
搜索形式的Case When语句如下:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
这种形式的Case When语句会依次评估每个布尔表达式,如果为真,则返回对应的结果表达式。如果没有任何一个布尔表达式为真,且存在else结果表达式,则返回else结果表达式。如果没有任何一个布尔表达式为真,且不存在else结果表达式,则返回NULL。
例如,下面的语句会根据员工的年龄和性别返回不同的奖金:
SELECT name, age, gender,
CASE
WHEN age > 50 AND gender = 'M' THEN 1000
WHEN age > 50 AND gender = 'F' THEN 1200
WHEN age <= 50 AND gender = 'M' THEN 800
WHEN age <= 50 AND gender = 'F' THEN 900
END AS bonus
FROM employee;