1. 程式人生 > 實用技巧 >case when的使用方法

case when的使用方法

第一種 格式 : 簡單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_wage1.97     when job_level = '2' then e_wage1.07     when job_level = '3' then e_wage1.06     else e_wage1.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,如下圖