与 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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
返回值
CASE 语句返回任意数据类型,例如字符串、数字、日期等。请注意,CASE 语句中的所有结果必须是相同的数据类型。如果没有发现任何条件为 true,则 CASE 语句将返回 ELSE 子句中的值。如果省略 ELSE 子句并且没有发现任何条件为 true,则 CASE 语句将返回 NULL。
示例:
考虑一个名为 Employee 的数据库表 包含以下记录:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
获取姓名和薪水按工资分类的员工数据(使用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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
结果如下:
Name | City | Salary | SalaryinCategory |
---|---|---|---|
John | London | 3000 | Salary is greater than 2800. |
Marry | New York | 2750 | Salary is less than 2800. |
Jo | Paris | 2800 | Salary is 2800. |
Kim | Amsterdam | 3100 | Salary is greater than 2800. |
Ramesh | New Delhi | 3000 | Salary is greater than 2800. |
Huang | Beijing | 2800 | Salary is 2800. |
考虑下面的示例,其中 CASE 语句用于根据给定条件按结果排序。
SELECT * FROM Employee
ORDER BY
(CASE
WHEN Age <= 27 THEN Age
ELSE Salary
END);
- 1
- 2
- 3
- 4
- 5
- 6
以下代码的结果将是:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
2 | Marry | New York | 24 | 2750 |
1 | John | London | 25 | 3000 |
3 | Jo | Paris | 27 | 2800 |
6 | Huang | Beijing | 28 | 2800 |
5 | Ramesh | New Delhi | 28 | 3000 |
4 | Kim | Amsterdam | 30 | 3100 |