我们先来看一下表中数据的情况:

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 ''

第二步:在鱼类中,名称为‘鲈鱼’的标记为2

第三步:排除第一第二步之后,剩余的标记为100,也就是非鲈鱼的鱼类标记为100.

整体的SQL语句如下:

select PRODUCTNAME,
CATEGORY,
case
    when (case when category = '鱼类' then 1 else 0 end) = 0 then ''
    when productname = '鲈鱼' then ''
    else ''
  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 ''
    when productname = '鲈鱼' then ''
    when productname = '西瓜' then ''
     else ''
  end category_code
from PRODUCTINFO

你们说西瓜最终的category_code会是什么捏?会是代码中的‘52’吗?

答案是否定的啦,西瓜在第一个when条件语句中,已经被给予了‘99’,就结束了,不会在执行下面的when条件了。 我们看看结果:

PRODUCTNAME    CATEGORY        CATEGORY_CODE
T恤   衣服 99
炒锅 厨具 99
西瓜 水果 99
鲈鱼 鱼类 2
鲫鱼 鱼类 100
草鱼 鱼类 100

西瓜还是‘99’啦

以上

case的执行顺序 & 嵌套使用的更多相关文章

  1. junit里面Test Case的执行顺序

    这里讨论的是junit在ant运行的情况,其他build工具应该也适用,但具体没试验过. 首先运行junit时是按照脚本中文件夹的顺序执行,如下脚本会先执行test1目录下的测试,其实是test2目录 ...

  2. TestNG-详解preserve-order的作用与测试case的执行顺序

    在TestNG xml配置文件中,关于<test>的配置里面,有一个属性叫preserve-order,一开始以为这个属性可以用来控制测试case(那些被@Test注解标注的方法)的执行顺 ...

  3. JUnit test case 执行顺序

    转自:JUnit中按照顺序执行测试方式 很多情况下,写了一堆的test case,希望某一些test case必须在某个test case之后执行.比如,测试某一个Dao代码,希望添加的case在最前 ...

  4. junit4X系列源码--Junit4 Runner以及test case执行顺序和源代码理解

    原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3534846.html.感谢作者的无私分享. 前一篇文章我们总体介绍了Junit4的用法以及一些简单的测试 ...

  5. day10 函数的嵌套执行顺序

    函数嵌套的执行顺序,从上往下,一层一层的执行重点注意的是函数和内存的交互原理 NMAE = def yangtuo(): # 2 将整个函数放入内存编译,但是不执行 name = "yang ...

  6. 【原创】Junit4详解二:Junit4 Runner以及test case执行顺序和源代码理解

    概要: 前一篇文章我们总体介绍了Junit4的用法以及一些简单的测试.之前我有个疑惑,Junit4怎么把一个test case跑起来的,在test case之前和之后我们能做些什么? Junit4执行 ...

  7. SQL执行顺序和coalesce以及case when的用法

    1.mysql的执行顺序 from on join where group by having select distinct union   //UNION 操作符用于合并两个或多个 SELECT ...

  8. JS中For循环中嵌套setTimeout()方法的执行顺序

    在For循环中执行setTimeOut()方法的代码,执行顺序是怎样的呢? 代码如下 function time() { for(var i= 0;i<5;i++){ setTimeout(fu ...

  9. sql逻辑执行顺序

    要知道SQL语句,我想我们有必要知道SQL Server查询分析器怎么执行我们的SQL语句的,我们很多人会看执行计划,或者用Profiler来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查 ...

随机推荐

  1. iOS生成静态库方法

    在iOS的开发过程中,我们常常用到第三方的库.比如支付.地图.广告等. 那么,如何制作自己的库文件呢? 如何将自己写的功能类编译成库文件,分发给其他人来使用呢并做成通用库里? iOS开发一年多来没有制 ...

  2. bzoj 3211: 花神游历各国

    #include<cstdio> #include<cmath> #include<iostream> #define M 100006 using namespa ...

  3. 使用Support Vector Machine

    使用svm(Support Vector Machine)中要获得好的分类器,最重要的是要选对kernel. 常见的svm kernel包括linear kernel, Gaussian kernel ...

  4. app上传到App Store的快捷方法及步骤

    跳过证书的申请及配置概要文件的设置, 现在根据已有的配置概要文件及发布证书开始: 1.先在Xcode上的PROJECT和TARGETS->Build Setting->Code Signi ...

  5. C++学习进度0

    昨天,又把<C++ primer> 刷了一遍,这一次看的是陈硕大大的评注版,重点看了陈硕的注释,<Accelerated C++>去年就把代码巧了一遍,<C++ prim ...

  6. mysql数据库每日定时自动备份

    使用navicat

  7. glibc与MSVC CRT(转载)

    glibc与MSVC CRT 运行库是平台相关的,因为它与操作系统结合得非常紧密.C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数 ...

  8. CONTAINING_RECORD的实现

    // 9.25.cpp : 定义控制台应用程序的入口点.///*----------------------------CONTAINING_RECODER的实现------------------- ...

  9. HTML5资料

    1 Canvas教程 <canvas>是一个新的用于通过脚本(通常是JavaScript)绘图的HTML元素.例如,他可以用于绘图.制作图片的组合或者简单的动画(当然并不那么简单).It ...

  10. 使用NSJSONSerialization将数组或字典转为字符串

    IOS中将数组或字典转为字符串可以用NSJSONSerialization,代码如下: NSData* data = [NSJSONSerialization dataWithJSONObject:a ...