Home [SQL] 條件判斷 Case (When Then Else)
Post
Cancel

[SQL] 條件判斷 Case (When Then Else)

SQLCASE類似程式語言裡的 if-then-else 語句,用來作邏輯判斷。

跟多數程式語言一樣,在寫 SQL 時可以用 IF... ELSE 來寫條件判斷;也跟多數程式語言一樣,除了 IF 之外,也有 CASE 的條件判斷語法。許多程式語言會用 swtich... case ,而在 SQL 則有點不同,會是用 CASE... WHEN

case可以在select語法中進行條件分歧處理。當when後面的條件為true,就會回傳then後面的值。

when...then這樣的組合可以撰寫許多次。檢查是從前面開始進行,最先符合條件的將成為case的回傳值。

case中沒有任何符合條件的值時,傳回值就會是null
(若省略了 ELSE 子句且洽無相符的條件則會返回 NULL。)

若使用else的話,可以設定「沒有符合任一條件時的傳回值」。

語法

寫法一:

1
2
3
4
5
6
7
8
SELECT 
    CASE
        WHEN "條件1" THEN "結果1"
        WHEN "條件2" THEN "結果2"
        ...-- 這邊可以加入各類條件
        ELSE "結果N"-- 如果不符合以上條件的,會是這個結果
    END
FROM "表格名";

寫法二:

1
2
3
4
5
6
7
8
SELECT 
    CASE "欄位名"
        WHEN "值1" THEN "結果1"
        WHEN "值2" THEN "結果2"
        ...-- 這邊可以加入各類條件
        ELSE "結果N"-- 如果不符合以上條件的,會是這個結果
    END -- 記得最後要寫這個結束語句
FROM "表格名";

範例1:Select 使用 Case

以「女性」和「男性」來顯示各負責人的姓別

寫法1:

case when "條件" then "結果"

1
2
3
4
5
6
7
8
--以「女性」和「男性」來顯示各負責人的姓別
select [負責人姓名],
    case
        when [性別] = 0 then '女性' --當性別=0時為女性
        when [性別] = 1 then '男性' --當性別=1時為男性
    end "性別"
from [負責人清單]
order by [負責人姓名]

寫法2:

case 欄位名 when "值" then "結果"

1
2
3
4
5
6
7
--case 欄位名 when 值1 then 結果1 ...
select [負責人姓名],
    case [性別] --欄位名
        when 0 then '女性' -- when "值1" then "結果1"
        when 1 then '男性' -- when "值2" then "結果2"
    end "性別"
from [負責人清單]

寫法3:

case 欄位名 when "值" then "結果" else "以上皆非的結果"

1
2
3
4
5
6
7
--因為性別只有兩個值,也可以這樣寫
select [負責人姓名],
    case [性別]
        when 0 then '女性'
        else '男性'
    end "性別"
from [負責人清單]

執行結果

1
2
3
4
5
6
7
8
9
10
負責人姓名	性別
小林	女性
小野	男性
伊藤	女性
宇賀神	男性
佐瀨	男性
岡田	男性
鈴木	男性
齋藤	男性
藤本	男性

範例2:Update使用Case更新

將販賣資料的負責人id,變更為現在負責人的上司id(mrg_id)
(當沒有上司時(MGR_ID為null的時候),維持原樣)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--將販賣資料的負責人id,變更為現在負責人的上司id(mrg_id)
--當沒有上司時(MGR_ID為null的時候),維持原樣

update 販賣資料
set 負責人ID = (
    select
        case
            --當沒有上司時(MGR_ID為null的時候),維持原樣
            when B.MGR_ID is null then 販賣資料.負責人ID
            else B.MGR_ID --變更為現在負責人的上司id
        end
    from 負責人清單 B
    where 販賣資料.負責人ID = B.負責人ID
)

請說明條件判斷語法 CASE 的用法

1
2
3
4
5
6
CASE 某個欄位
    WHEN '條件 1' THEN '結果 1'
    WHEN '條件 2' THEN '結果 2'
    ... -- 這邊可以加入各類條件
    ELSE '結果' -- 如果不符合以上條件的,會是這個結果
END -- 記得最後要寫這個結束語句

[SQL] Update 使用 Case 語法更新
[SQL] 根據月份統計商品別的數量 Sum()、Case(When Then Else) 請說明條件判斷語法 CASE 的用法

This post is licensed under CC BY 4.0 by the author.