SQL SERVER case的用法及实例

1.  官方释义

计算条件表达式,并返回多个可能的结果表达式之一。

   CASE 简单表达式,它通过将表达式与一组简单的表达式进行比较来确定结果。

   CASE 搜索表达式,它通过计算一组布尔表达式来确定结果。

这两种格式都支持可选的 ELSE 参数。

CASE 可用于允许使用有效表达式的任意语句或子句。 例如,可以在 SELECT、UPDATE、DELETE 和 SET 等语句以及 select_list、IN、WHERE、ORDER BY 和 HAVING 等子句中使用 CASE

2. 语法定义

    CASE简单表达式:

    CASE   input_expression

             WHEN   when_expression   THEN   result_expression   [ ...n ]

     [ ELSE  else_result_expression ]

     END

    CASE搜索表达式: 

    CASE

          WHEN   Boolean_expression  THEN   result_expression  [ ...n ]

     [ ELSE  else_result_expression ]

     END

参数说明
input_expression
使用简单 CASE 格式时计算的表达式。 input_expression 是任何有效的表达式。

WHEN when_expression
使用简单 CASE 格式时要与 input_expression 进行比较的简单表达式。 when_expression 是任何有效的表达式。 input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型。

THEN result_expression
当 input_expression = when_expression 的计算结果为 TRUE 时,或 Boolean_expression 的计算结果为 TRUE 时返回的表达式。 result expression 是任何有效的表达式。

ELSE else_result_expression
比较运算计算结果不为 TRUE 时返回的表达式。 如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。 else_result_expression 是任何有效的表达式。 else_result_expression 及任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型。

WHEN Boolean_expression
使用 CASE 搜索格式时所计算的布尔表达式。 Boolean_expression 是任何有效的布尔表达式。

3. case实例

A. 使用带有 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;  

B. 使用带有 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 ;  

C. 在 ORDER BY 子句中使用 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;  

猜你喜欢

转载自blog.csdn.net/szzhuyike/article/details/81738139