Home [SQL] Update 使用 Case 語法更新
Post
Cancel

[SQL] Update 使用 Case 語法更新

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
)

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

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