与 IF 语句一样,SQL Server (Transact-SQL) CASE 语句检查条件并返回一个值。它从检查第一个条件开始,并继续检查条件,直到发现条件为真(如 IF-THEN-ELSE 语句)。一旦发现条件为真,它将停止检查进一步的条件并返回值。如果没有发现任何条件为 true,则返回 ELSE 子句中的值。如果未定义 ELSE 子句,则返回 NULL。

语法

在 SQL Server (Transact-SQL) 中使用 CASE 语句的语法如下:

CASE  
   WHEN Condition1 THEN Value1
   WHEN Condition2 THEN Value2
   WHEN Condition3 THEN Value3
   ... 
   ELSE Value
END 

返回值

CASE 语句返回任意数据类型,例如字符串、数字、日期等。请注意,CASE 语句中的所有结果必须是相同的数据类型。如果没有发现任何条件为 true,则 CASE 语句将返回 ELSE 子句中的值。如果省略 ELSE 子句并且没有发现任何条件为 true,则 CASE 语句将返回 NULL。

示例:

考虑一个名为 Employee 的数据库表 包含以下记录:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

获取姓名和薪水按工资分类的员工数据(使用CASE语句定义类别),可以使用以下语句:

SELECT Name, City, Salary, 
CASE
  WHEN Salary < 2800 THEN 'Salary is less than 2800.'
  WHEN Salary > 2800 THEN 'Salary is greater than 2800.'
  WHEN Salary = 2800 THEN 'Salary is 2800.'
  ELSE 'Salary Data missing.'
END AS SalaryinCategory 
FROM Employee; 

结果如下:

NameCitySalarySalaryinCategory
JohnLondon3000Salary is greater than 2800.
MarryNew York2750Salary is less than 2800.
JoParis2800Salary is 2800.
KimAmsterdam3100Salary is greater than 2800.
RameshNew Delhi3000Salary is greater than 2800.
HuangBeijing2800Salary is 2800.

考虑下面的示例,其中 CASE 语句用于根据给定条件按结果排序。

SELECT * FROM Employee 
ORDER BY
(CASE
  WHEN Age <= 27 THEN Age
  ELSE Salary
END); 

以下代码的结果将是:

EmpIDNameCityAgeSalary
2MarryNew York242750
1JohnLondon253000
3JoParis272800
6HuangBeijing282800
5RameshNew Delhi283000
4KimAmsterdam303100