一、case when的使用方法


這篇文章在借鑒前人的基礎上,進行了驗證,感謝前人的分享

一、case when的使用方法

 

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


 第一種 格式 : 簡單Case函數 :

格式說明    

    case 列名

    when   條件值1   then  選項1

    when   條件值2    then  選項2.......

    else     默認值      end

eg:

    select 
    case   job_level
    when     '1'     then    '1111'
    when   '2'     then    '1111'
    when   '3'     then    '1111'
    else       'eee' end
    from     dbo.employee


 第二種  格式 :Case搜索函數

格式說明    

    case  

    when  列名= 條件值1   then  選項1

    when  列名=條件值2    then  選項2.......

    else    默認值 end

eg:

    update  employee
    set         e_wage =
    case
    when   job_level = '1'    then e_wage*1.97
    when   job_level = '2'   then e_wage*1.07
    when   job_level = '3'   then e_wage*1.06
    else     e_wage*1.05
    end


提示:通常我們在寫Case When的語句的時候,會容易忘記 end 這個結束,一定要記得喲!

比較: 兩種格式,可以實現相同的功能。

    簡單Case函數的寫法相對比較簡潔,但是和Case搜索函數相比,功能方面會有些限制,比如寫判斷式。還有一個需要注意的問題,Case函數只返回第一個符合條件的     值,剩下的Case部分將會被自動忽略。

二、case when使用案例

下面我們來看一下,使用 Case 函數都能做些什么事情。

1、已知數據按照另外一種方式進行分組,分析

  • 有如下數據:(為了看得更清楚,直接使用國家代碼作為Primary Key)
     
    根據這個國家人口數據,統計各個大洲的人口數量
        
 
  • 用這個方法來判斷工資的等級,並統計每一等級的人數
       
    輸出每一個人的薪資等級
    

     然后計算每一個等級的數量

方法1:
    

方法2:

    

2、豎表轉橫表

    如下表所示,統計日本、泰國不同性別的人口,“sex”中1代表男性、2代表女性、3代表無性、4代表雙性,
    要求以(國家、男性、女性、無性、雙性)為字段輸出表。
    
    首先生成確定的字段(國家、男性、女性、無性、雙性),
    然后以case when來判斷性別中人口的取值,並輸出表如下圖:
    
    最后使用group by來通過國家分組,並取其中的最大值(有的人會使用sum求和,效果也是一樣的)
    最終結果如下圖:
    
 

3、根據條件有選擇的update

P_key是表A_TEST1的主鍵,結果a和b的順序搞反了,這是需要把a和b倒換過來,一般情況下,要想把兩條數據的Primary key,a和b交換,需要經過臨時存儲,拷貝,讀回數據的三個過程,要是使用Case函數的話,一切都變得簡單多了。
使用下列方式可將主鍵a、b替換過來

 

但這里有一個問題一定要注意,else 后面一定要將原有的值放進來,否則除了a、b意外的值會被置成null,如下圖
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM