天天看點

sql語句判斷 case when用法(二)

sql語句判斷方法之一

select

case when t.bk1='on' then 1

else 0 end  as 基礎 ,

case when t.bk2='on' then 1

else 0 end  as 法規 ,

case when t.bk3='on' then 1

else 0 end  as 電算化 

from info t

select t.bk1,t.bk2,t.bk3,

case when t.bk1='on' then 1

else 0 end  +

case when t.bk2='on' then 1

else 0 end  +

case when t.bk3='on' then 1

else 0 end  as 總合 

from info t order by 總合 desc

Case具有兩種格式。簡單Case函數和Case搜尋函數。 

--簡單Case函數 

CASE sex 

WHEN '1' THEN '男' 

WHEN '2' THEN '女' 

ELSE '其他' END 

--Case搜尋函數 

CASE WHEN sex = '1' THEN '男' 

WHEN sex = '2' THEN '女' 

ELSE '其他' END

這兩種方式,可以實作相同的功能。簡單Case函數的寫法相對比較簡潔,但是和Case搜尋函數相比,功能方面會有些限制,比如寫判斷式。 

還有一個需要注意的問題,Case函數隻傳回第一個符合條件的值,剩下的Case部分将會被自動忽略。

例子:

有一張表,裡面有3個字段:國文,數學,英語。其中有3條記錄分别表示國文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄并按以下條件顯示出來(并寫出您的思路): 

大于或等于80表示優秀,大于或等于60表示及格,小于60分表示不及格。 

顯示格式: 

國文 數學 英語 

及格 優秀 不及格 

------------------------------------------

select

(case when 國文>=80 then '優秀'

when 國文>=60 then '及格'

else '不及格') as 國文,

(case when 數學>=80 then '優秀'

when 數學>=60 then '及格'

else '不及格') as 數學,

(case when 英語>=80 then '優秀'

when 英語>=60 then '及格'

else '不及格') as 英語,

from table

CASE 可能是 SQL 中被誤用最多的關鍵字之一。雖然你可能以前用過這個關鍵字來建立字段,但是它還具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

首先讓我們看一下 CASE 的文法。在一般的 SELECT 中,其文法如下:

SELECT <myColumnSpec> =

            CASE

            WHEN <A> THEN <somethingA>

            WHEN <B> THEN <somethingB>

            ELSE <somethingE>

            END

在上面的代碼中需要用具體的參數代替尖括号中的内容。下面是一個簡單的例子:

USE pubs

            GO

            SELECT

            Title,

            'Price Range' =

            CASE

            WHEN price IS NULL THEN 'Unpriced'

            WHEN price < 10 THEN 'Bargain'

            WHEN price BETWEEN 10 and 20 THEN 'Average'

            ELSE 'Gift to impress relatives'

            END

            FROM titles

            ORDER BY price

            GO

這是 CASE 的典型用法,但是使用 CASE 其實可以做更多的事情。比方說下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*)

            FROM titles

            GROUP BY

            CASE

            WHEN price IS NULL THEN 'Unpriced'

            WHEN price < 10 THEN 'Bargain'

            WHEN price BETWEEN 10 and 20 THEN 'Average'

            ELSE 'Gift to impress relatives'

            END

            GO

你甚至還可以組合這些選項,添加一個 ORDER BY 子句,如下所示:

USE pubs

            GO

            SELECT

            CASE

            WHEN price IS NULL THEN 'Unpriced'

            WHEN price < 10 THEN 'Bargain'

            WHEN price BETWEEN 10 and 20 THEN 'Average'

            ELSE 'Gift to impress relatives'

            END AS Range,

            Title

            FROM titles

            GROUP BY

            CASE

            WHEN price IS NULL THEN 'Unpriced'

            WHEN price < 10 THEN 'Bargain'

            WHEN price BETWEEN 10 and 20 THEN 'Average'

            ELSE 'Gift to impress relatives'

            END,

            Title

            ORDER BY

            CASE

            WHEN price IS NULL THEN 'Unpriced'

            WHEN price < 10 THEN 'Bargain'

            WHEN price BETWEEN 10 and 20 THEN 'Average'

            ELSE 'Gift to impress relatives'

            END,

            Title

            GO

     注意,為了在 GROUP BY 塊中使用 CASE,查詢語句需要在 GROUP BY 塊中重複 SELECT 塊中的 CASE 塊。

除了選擇自定義字段之外,在很多情況下 CASE 都非常有用。再深入一步,你還可以得到你以前認為不可能得到的分組排序結果集。

繼續閱讀