?第一種:簡單Case函數(shù)?
? ? ? ? ? ? ? case 列名
when ? 條件值1 ? then ?選擇項1
when ? 條件值2 ? ?then ?選項2.......
else ? ? 默認值 ? ? ?end
第二種:Case搜索函數(shù)
? ? ? ? ? ? ? case ?
when ?列名= 條件值1 ? then ?選擇項1
when ?列名=條件值2 ? ?then ?選項2.......
else ? ?默認值 end
比較: 兩種格式,可以實現(xiàn)相同的功能。簡單Case函數(shù)的寫法相對比較簡潔,但是和Case搜索函數(shù)相比,功能方面會有些限制,比如寫判斷式。
還有一個問題,Case函數(shù)只返回第一個符合條件的值,剩下的Case部分將會被自動忽略。如下面這個例子:
CASE col
WHEN col_1 IN ( 'a', 'b') THEN '第一類'
WHEN col_1 IN ('a')? ? ? THEN '第二類'
ELSE'其他' END
這個語句中,滿足條件a永遠不會返回第二類,因為按順序發(fā)現(xiàn)a在第一類的時候查詢就已經(jīng)結(jié)束了。所以case無法用于一個東西在一個分類里有不同的屬性的條件。
case when 好處很明顯就是非常易于看懂,相比實現(xiàn)同樣條件用復(fù)雜的自連接查詢,在邏輯上很容易看懂(自連接查詢在不同的情況下可能會有BUG)。