我們先來看一下表中數據的情況: 需求: 把非魚類的產品都標記為99,鱸魚標記為2,非鱸魚的魚類標記為50. 步驟: 第一步:利用嵌套case 語句將非魚類標記為99 第二步:在魚類中,名稱為‘鱸魚’的標記為100 第三步:排除第一第二步之後,剩餘的標記為50,也就是非鱸魚的魚類標記為50. 整體的S ...
我們先來看一下表中數據的情況:
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'
第二步:在魚類中,名稱為‘鱸魚’的標記為100
第三步:排除第一第二步之後,剩餘的標記為50,也就是非鱸魚的魚類標記為50.
整體的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’啦
以上