SQL Server 中的 CASE 表达式用法详解及实例解析大全

频道:互联网 日期: 浏览:16

CASE 表达式用于计算条件表达式,并返回多个可能的结果表达式之一,有简单表达式和搜索表达式两种,都支持可选的 ELSE 参数,可用于允许使用有效表达式的任意语句或子句,如 SELECT、UPDATE、DELETE 和 SET 等语句,以及 select_list、IN、WHERE、ORDER BY 和 HAVING 等子句。

语法定义

CASE 简单表达式

语法为:CASE input_expression WHEN when_expression THEN result_expression ( ...n ) ( ELSE else_result_expression ) END。参数说明如下:

  • input_expression:使用简单 CASE 格式时计算的表达式,是任何有效的表达式。
  • when_expression:使用简单 CASE 格式时要与 input_expression 进行比较的简单表达式,是任何有效的表达式。input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型。
  • THEN result_expression:当 input_expression = when_expression 的计算结果为 TRUE 时返回的表达式,是任何有效的表达式。
  • ELSE else_result_expression:比较运算计算结果不为 TRUE 时返回的表达式。如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。else_result_expression 是任何有效的表达式,且其与任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型。

CASE 搜索表达式

语法为:CASE WHEN Boolean_expression THEN result_expression ( ...n ) ( ELSE else_result_expression ) END。参数说明如下:

SQL Server 中的 CASE 表达式用法详解及实例解析大全

  • WHEN Boolean_expression:使用 CASE 搜索格式时所计算的布尔表达式,是任何有效的布尔表达式。
  • THEN result_expression:当 Boolean_expression 的计算结果为 TRUE 时返回的表达式,是任何有效的表达式。
  • ELSE else_result_expression:比较运算计算结果不为 TRUE 时返回的表达式。如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。else_result_expression 是任何有效的表达式,且其与任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型。

实例解析

带有 CASE 简单表达式的 SELECT 语句

CASE 简单表达式只能用于等同性检查,而不进行其他比较。示例如下:

SELECT ProductNumber, Category = 
CASE ProductLine 
WHEN 'R' THEN 'Road' 
WHEN 'M' THEN 'Mountain' 
WHEN 'T' THEN 'Touring' 
WHEN 'S' THEN 'Other sale items' 
ELSE 'Not for sale' 
END,
Name 
FROM Production.Product 
ORDER BY ProductNumber;

带有 CASE 搜索表达式的 SELECT 语句

CASE 搜索表达式允许根据比较值替换结果集中的值。示例如下:

SELECT ProductNumber, Name, "Price Range" = 
CASE 
WHEN ListPrice = 0 THEN 'Mfg item - not for resale' 
WHEN ListPrice < 50 THEN 'Under $50' 
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' 
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' 
ELSE 'Over $1000' 
END 
FROM Production.Product 
ORDER BY ProductNumber ;

在 ORDER BY 子句中使用 CASE

示例如下:

SQL Server 中的 CASE 表达式用法详解及实例解析大全

SELECT BusinessEntityID, SalariedFlag 
FROM HumanResources.Employee 
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC 
,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;

SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName 
FROM Sales.vSalesPerson 
WHERE TerritoryName IS NOT NULL 
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName 
ELSE CountryRegionName END;

常用 Select 用法实例

在人物表中对于性别列,使用数字 1 表示男,2 表示女,0 表示其他,在搜索表示数据时,使用 Case 表达式如下:

SELECT Id,Name,Age,
CASE SEX
-- 此处可补充具体的 WHEN THEN 语句
END
-- 此处可补充 FROM 等其他语句

Update 中使用 Case 表达式

当需要更新某个字段需要面对多种情况时,使用 Case 表达式可以一次更新。例如针对一张分数表。

Group By 聚合函数中使用 Case 表达式

针对分数表统计出学生各学科成绩,如下表:PersonId 为学号,Subject:1 为语文,2 为数学,3 为英语。示例如下:

SQL Server 中的 CASE 表达式用法详解及实例解析大全

SELECT PersonId,
SUM(CASE WHEN Subject = 1 THEN Score ELSE 0 END) AS '语文',
SUM(CASE WHEN Subject = 2 THEN Score ELSE 0 END) AS '数学',
SUM(CASE WHEN Subject = 3 THEN Score ELSE 0 END) AS '英语'
FROM Score 
GROUP BY PersonId;

在 WHERE 子句中使用 CASE

可以利用 CASE 表达式来实现动态条件过滤。例如:

SELECT product_name,unit_price 
FROM products 
WHERE CASE WHEN inventory > 0 THEN unit_price ELSE unit_price  1.2 END < 100;
你可能想看: