
当然,CASE WHEN 语句在 SQL Server 中非常有用,它允许你在查询中根据条件返回不同的结果。下面是一个详细的指南和示例,展示如何在 SQL Server 查询中使用 CASE WHEN。
基本语法
SELECT column1, column2, CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END AS alias_name FROM table_name;- column1, column2: 你想要选择的列。
- condition1, condition2: 你要评估的条件。
- result1, result2: 当条件满足时返回的结果。
- default_result: 如果所有条件都不满足时返回的默认结果(可选)。
- alias_name: 为生成的列指定一个别名。
- table_name: 你的数据表名。
示例
假设你有一个名为 Employees 的表,包含以下列:
- EmployeeID
- FirstName
- LastName
- Salary
- DepartmentID
你想要生成一个新的列 SalaryGrade,基于员工的薪水等级进行分类:
- 如果薪水大于 70000,则为 'High'
- 如果薪水在 40000 到 70000 之间,则为 'Medium'
- 如果薪水小于或等于 40000,则为 'Low'
你可以使用如下的 CASE WHEN 语句来实现这个需求:
SELECT EmployeeID, FirstName, LastName, Salary, CASE WHEN Salary > 70000 THEN 'High' WHEN Salary BETWEEN 40000 AND 70000 THEN 'Medium' ELSE 'Low' END AS SalaryGrade FROM Employees;更复杂的示例
假设你还希望根据部门 ID 来分类员工所属的部门名称,比如:
- 部门 ID 为 1 是 'HR'
- 部门 ID 为 2 是 'Engineering'
- 其他部门为 'Other'
你可以嵌套 CASE WHEN 语句或使用多个独立的 CASE WHEN 语句来生成所需的输出:
SELECT EmployeeID, FirstName, LastName, Salary, DepartmentID, CASE WHEN DepartmentID = 1 THEN 'HR' WHEN DepartmentID = 2 THEN 'Engineering' ELSE 'Other' END AS DepartmentName, CASE WHEN Salary > 70000 THEN 'High' WHEN Salary BETWEEN 40000 AND 70000 THEN 'Medium' ELSE 'Low' END AS SalaryGrade FROM Employees;使用 CASE WHEN 进行聚合计算
你也可以在聚合函数中使用 CASE WHEN 来进行更复杂的计算。例如,计算每个薪水等级的员工数量:
SELECT CASE WHEN Salary > 70000 THEN 'High' WHEN Salary BETWEEN 40000 AND 70000 THEN 'Medium' ELSE 'Low' END AS SalaryGrade, COUNT(*) AS NumberOfEmployees FROM Employees GROUP BY CASE WHEN Salary > 70000 THEN 'High' WHEN Salary BETWEEN 40000 AND 70000 THEN 'Medium' ELSE 'Low' END;在这个例子中,我们使用了 GROUP BY 子句来对每个薪水等级进行分组,并使用 COUNT(*) 计算每个组的员工数量。
总结
CASE WHEN 语句是 SQL Server 中一个非常强大的工具,它允许你在查询中进行条件判断并返回相应的结果。通过结合其他 SQL 功能,如聚合函数、子查询等,你可以构建出复杂且功能丰富的查询来满足各种业务需求。
