case when的判斷順序 case when

2021-10-13 06:35:48 字數 1740 閱讀 5255

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

一、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函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判斷式。還有乙個需要注意的問題,case函式只返回第乙個符合條件的     值,剩下的case部分將會被自動忽略。

二、case when使用案例

下面我們來看一下,使用case函式都能做些什麼事情。

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

有如下資料:(為了看得更清楚,直接使用國家**作為primarykey)

根據這個國家人口資料,統計各個大洲的人口數量

用這個方法來判斷工資的等級,並統計每一等級的人數

輸出每乙個人的薪資等級

然後計算每乙個等級的數量

方法1:

方法2:

2、豎表轉橫表

如下表所示,統計日本、泰國不同性別的人口,「***」中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,如下圖

case when 空值判斷

在對資料庫進行查詢時,遇到了乙個問題 查詢結果中的某一列需要判斷另一列是否為空的來確定值,自然就想到了case when,於是寫出了下面的sql 其他部分省略 case date when null then a else b end c 結果不論date是否為null,c這一列的值的結果都是 b,...

邏輯判斷的順序性

true false false這個邏輯判斷表示式結果是多少?不少人應該會認為是false,但正確的結果是true,一開始我也犯了同樣的錯誤,但結果為什麼是true?真實的原因是由於邏輯操作符也有優先順序關係,其優先順序排序如下 操作符優先順序 high medium low 根據邏輯操作符的優先順...

使用case when的心得

今天看到了這樣乙個sql語句 select top 100 from test order by case when expire date getdate then 0 else 1 end gold desc,expire date desc 剛開始我想這個sql語句最多兩個結果 1 selec...