CASE 類似於程式語言裡的 if then else語句,用來作邏輯判斷。
語法
1
2
3
4
5
CASE
WHEN condition THEN result
[WHEN···]
[ELSE result]
END
1
2
3
4
5
CASE expression
WHEN value THEN result
[WHEN···]
[ELSE result]
END
在 Case語法中,若省略了
ELSE子句,不符合的條件則會返回NULL。
範例1
將販賣單價未滿30000的商品提高20%,30000以上未滿50000調降20%
1
2
3
4
5
6
7
8
9
--將販賣單價未滿30000的商品提高20%,30000以上未滿50000調低20%
update 商品清單
set 販賣單價 = (
case
when 販賣單價<30000 then 販賣單價*1.2
when 販賣單價>=30000 and 販賣單價<=50000 then 販賣單價*0.8
else 販賣單價 --以上不符合會回傳null,所以加上else
end
)
更新動作再加上條件來對同一行進行不同的更新
- 未滿30000提高20%:
update 商品清單 set 販賣單價 = 販賣單價*1.2 - 30000以上未滿50000降低20%:
update 商品清單 set 販賣單價 = 販賣單價*0.8 - 50000以上:
update 商品清單 set 販賣單價 = 販賣單價
執行結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select * from 商品清單
商品ID 商品名稱 群組名稱 進貨單價 販賣單價
1 桌上型電腦 電腦主機 130000 180000
2 筆記型電腦 電腦主機 299000 270000
3 17吋螢幕 周邊設備 52000 40000
4 19吋螢幕 周邊設備 104000 95000
5 15吋液晶螢幕 周邊設備 130000 120000
6 數位相機 周邊設備 50000 70000
7 印表機 周邊設備 26000 30000
8 掃描器 周邊設備 32500 24000
9 HUB 網路設備 6500 8400
10 網路卡 網路設備 19500 24000
11 DVDROM 周邊設備 6500 12000
13 DVDROM 周邊設備 NULL NULL
14 DVDROM 周邊設備 1299 11999
範例2
將販賣資料的負責人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
)