SQL Server 流程控制语句(三): CASE 语句
一、语法
1.简单 CASE 语句
CASE input_expression
WHEN when_expression THEN result_expression
[...n]
[
ELSE else_result_expression
END
- input_expression:任何有效的 SQL 表达式。
- when_expression:与input_expression 进行比较的简单表达式。
- [...n]:表明可以使用多个 WHEN when_expression THEN result_expression 表达式
- result_expression:当 input_expression = when_expression 取值为 true 时返回的表达式。可以是任意有效的 Sql Server 表达式。
- ELSE else_result_expression:当所有的 input_expression = when_expression 均为 false 时返回的值。此时如果省略 ELSE else_result_expression,此时将返回 NULL 值。else_result_expression 和 所有的 result_expression 数据类型必须相同,或者可以隐式转换。
2.CASE 搜索语句
CASE
WHEN Boolean_expression THEN result_expression
[...n]
[
ELSE else_result_expression
END
- Boolean_expression:任何有效的布尔表达式。
- 其他参数同(1)中。
二、两种方式的执行顺序
1.简单 CASE 语句
- 计算 input_expression ,然后按指定的顺序与每个 WHEN 子句进行 input_expression = when_expression 的计算。
- 返回第一个取值为 true 的 result_expression。
- 如果没有取值为 true 的 input_expression = when_expression ,则返回 ELSE 子句中的 else_result_expression,若没有 else_result_expression ,则返回 NULL 值。
2.CASE 搜索语句
- 按指定的顺序计算每个 WHEN 子句中的 Boolean_expression.
- 返回第一个取值为 true 的 Boolean_expression 的 result_expression。
- 如果没有取值为 true 的 Boolean_expression ,则返回 ELSE 子句中的 else_result_expression,若没有 else_result_expression ,则返回 NULL 值。
三、实例
use student
select 学号,课程代号,
备注=case
when 课程成绩<90 then '成绩良好'
when 课程成绩>90 then '成绩优秀'
else '--'
end
from grade