SQL的CASE類似程式語言裡的 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 的用法