case的执行顺序 & 嵌套使用
Posted Mrs.Totoro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘
第二步:在鱼类中,名称为‘鲈鱼’的标记为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’啦
以上
以上是关于case的执行顺序 & 嵌套使用的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中执行嵌套 case 语句逻辑的最佳方法