学而实习之 不亦乐乎

SQL Server 流程控制语句(三): CASE 语句

2022-08-04 08:37:41

一、语法

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 语句

  1. 计算 input_expression ,然后按指定的顺序与每个 WHEN 子句进行 input_expression = when_expression 的计算。
  2. 返回第一个取值为 true 的 result_expression。
  3. 如果没有取值为 true 的 input_expression = when_expression ,则返回 ELSE 子句中的 else_result_expression,若没有 else_result_expression ,则返回 NULL 值。

2.CASE 搜索语句

  1. 按指定的顺序计算每个 WHEN 子句中的 Boolean_expression.
  2. 返回第一个取值为 true 的 Boolean_expression 的 result_expression。
  3. 如果没有取值为 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