在SQL Server中,Case When语句是一种强大的工具,它可以根据特定的条件返回不同的值。这种语句类似于其他编程语言中的if-else或switch-case结构。Case When语句有两种形式:简单形式和搜索形式。
简单形式的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语句则会依次评估每个布尔表达式,如果为真,则返回对应的结果表达式。如果没有任何一个布尔表达式为真,且存在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;