与 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 的数据库表 包含以下记录:
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;
结果如下:
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);
以下代码的结果将是:
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 |