case的執行順序 & 嵌套使用


我們先來看一下表中數據的情況:

select * from  PRODUCTINFO

 

PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPERATION  ORIGIN
PID0001   T恤         25.62         100     衣服    促銷產品        北京
PID0002   炒鍋        35.62         100     廚具    促銷產品        北京
PID0003   西瓜        45.62         100     水果    促銷產品        北京
PID0004   鱸魚        55.62         100     魚類    商品描述004     北京
PID0004   鯽魚        75.62         100     魚類    商品描述005     北京
PID0004   草魚        65.62         100     魚類    商品描述006     北京

需求:

把非魚類的產品都標記為99,鱸魚標記為2,非鱸魚的魚類標記為50.

步驟:

第一步:利用嵌套case 語句將非魚類標記為99

(case  when category = '魚類' then   1 else 0  end) = 0 then '99'

第二步:在魚類中,名稱為‘鱸魚’的標記為2

第三步:排除第一第二步之后,剩余的標記為100,也就是非鱸魚的魚類標記為100.

整體的SQL語句如下:

select PRODUCTNAME, CATEGORY, case
             when (case when category = '魚類' then 1  else 0 end) = 0 then '99'
             when productname = '鱸魚' then '2'
             else '100'
         end category_code from PRODUCTINFO

執行結果如下:

PRODUCTNAME CATEGORY CATEGORY_CODE T恤    衣服 99 炒鍋 廚具 99 西瓜 水果 99 鱸魚 魚類 2 鯽魚 魚類 100 草魚 魚類 100            

執行順序說明:

從第一個when條件開始向下執行,如果條件滿足了,則不會執行下面的when條件了。

舉個栗子:

 

select PRODUCTNAME, CATEGORY, case
             when (case when category = '魚類' then 1 else  0 end) = 0 then '99'
             when productname = '鱸魚' then '2'
             when productname = '西瓜' then '52'
             else '100'
         end category_code from PRODUCTINFO

 

你們說西瓜最終的category_code會是什么捏?會是代碼中的‘52’嗎?

答案是否定的啦,西瓜在第一個when條件語句中,已經被給予了‘99’,就結束了,不會在執行下面的when條件了。 我們看看結果:

PRODUCTNAME CATEGORY CATEGORY_CODE T恤   衣服 99 炒鍋 廚具 99 西瓜 水果 99 鱸魚 魚類 2 鯽魚 魚類 100 草魚 魚類 100                                 

西瓜還是‘99’啦

 

以上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM