我们先来看一下表中数据的情况:
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’啦
以上