關鍵字: CASE, WHEN, THEN, ELSE, END
重點:CASE表達式
SQL的CASE表達式,在SELECT語句中針對單個的表達式應用IF-THEN-ELSE類型的邏輯。
1. IF-THEN-ELSE邏輯
IF some condition is true
THEN do this
ELSE do that
CASE表達式能夠出現在SELECT語句很多地方,先看緊跟在SELECT之後的Columnlist的這種情況。
SELECT
column1,
column2,
CaseExpression
FROM table
CASE表達式有兩種一般格式:簡單格式和查詢格式
2. 簡單格式
SELECT
CASE CaseExpression
WHEN Value1 THEN result1
WHEN Value1 THEN result1
(Repeat WHEN-THEN any number of times)
[ELSE DefaultResult]
END
[]代表可選,說明ELSE也不是必須的。但是每個CASE表達式中包含關鍵字ELSE已明確聲明一個默認值是一個好的習慣。
示例:
ProductID CategoryCode ProductDescription
------------------------------------------------------------------------------
1 F Apple
2 F Orange
3 S Mustand
4 V Corrot
SELECT
CASE CategoryCode
WHEN ‘F’ THEN ‘Fruit’
WHEN ‘V’ THEN ‘Vegetable’
ElSE ‘Other’
END As ‘Category’,
ProductDescription AS ‘Description’
FROM Products
CASE關鍵字作用在CategoryID列上:如果該列是’F’則顯示’Fruit’...ELSE行提供了一個默認值。END結束了CASE語句,並且還包含了一個關鍵字AS爲這個CASE表達式的結果提供了一個列的別名,意思就是這一結果列的值是默認值。
結果:
Category Description
---------------------------
Fruit Apple
Fruit Orange
Other Mustand
Vegetable Corrot
可見,CASE表達式對於把不好理解的值轉換成有意義的描述是很有用的。
3. 查詢格式
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
(Repeat WHEN-THEN any number of times)
[ELSE DefaultResult]
END
以本例寫出等價的查詢格式的表達式:
SELECT
CASE
WHEN CategoryCode ‘F’ THEN ‘Fruit’
WHEN CategoryCode ‘V’ THEN ‘Vegetable’
ElSE ‘Other’
END As ‘Category’,
ProductDescription AS ‘Description’
FROM Products
對比簡單格式,簡單格式是把待計算的量放在了CASE關鍵字之後,WHEN後邊的表達式是一個簡單的直接量(邏輯就是如果CASE後面的計算量等於WHEN後面的直接量,那麼CASE後面的計算量=THEN後面的直接量)。查詢格式中待計算的量並不是放在關鍵字CASE後面的,這種格式允許在WHEN後面放置較爲複雜的條件表達式。
如果是這樣的表
ProductID Fruit Vegetable Spice ProductDescription
------------------------------------------------------------------------------
1 X Apple
2 X Orange
3 X Mustand
4 X Carrot
SELECT
CASE
WHEN Fruit ‘X’ THEN ‘Fruit’
WHEN Vegetable ‘X’ THEN ‘Vegetable’
ELSE ‘Other’
END AS ‘Category’,
ProductDescription AS ‘Description’
FROM Products
結果:
Category Description
-------------------------------
Fruit Apple
Fruit Orange
Other Mustand
Vegetable Corrot
PS:因爲原來的表使用了三個列來表示產品是水果、蔬菜還是香料,那麼需要查詢格式的CASE子句,以實現邏輯。簡單格式只是對單個的列進行分析。