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,casewhen (case when category = '鱼类' then 1 else 0 end) = 0 then '99'when productname = '鲈鱼' then '2'else '100'end category_codefrom PRODUCTINFO 执行结果如下:
PRODUCTNAME CATEGORY CATEGORY_CODE
T恤 衣服 99
炒锅 厨具 99
西瓜 水果 99
鲈鱼 鱼类 2
鲫鱼 鱼类 100
草鱼 鱼类 100 执行顺序说明:
从第一个when条件开始向下执行,如果条件满足了,则不会执行下面的when条件了。
举个栗子:
select PRODUCTNAME,CATEGORY,casewhen (case when category = '鱼类' then 1 else 0 end) = 0 then '99'when productname = '鲈鱼' then '2'when productname = '西瓜' then '52'else '100'end category_codefrom PRODUCTINFO
你们说西瓜最终的category_code会是什么捏?会是代码中的‘52’吗?
答案是否定的啦,西瓜在第一个when条件语句中,已经被给予了‘99’,就结束了,不会在执行下面的when条件了。 我们看看结果:
PRODUCTNAME CATEGORY CATEGORY_CODE
T恤 衣服 99
炒锅 厨具 99
西瓜 水果 99
鲈鱼 鱼类 2
鲫鱼 鱼类 100
草鱼 鱼类 100 西瓜还是‘99’啦
以上
转载于:https://www.cnblogs.com/lyy-totoro/p/6016920.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
