我們先來看一下表中數據的情況:
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 when category = '魚類' then 1 else 0 end) = 0 then '99'
整體的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’啦
以上