sqlserver 查询语句使用casewhen

sqlserver 查询语句使用casewhen

当然,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 功能,如聚合函数、子查询等,你可以构建出复杂且功能丰富的查询来满足各种业务需求。