SQL 之 基於列的邏輯

關鍵字: CASE, WHEN, THEN, ELSE, END

重點:CASE表達式

SQLCASE表達式,在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子句,以實現邏輯。簡單格式只是對單個的列進行分析。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章