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,
       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’啦

 

以上

 

转载于:https://www.cnblogs.com/lyy-totoro/p/6016920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值