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;