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

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. Android 中的常用方法

    //安装apk文件 private void installAPK(File file) {  Intent intent = newIntent(Intent.ACTION_VIEW);  Uri ...

  2. PHP文件的读取

    1.PHP部分文件操作函数 ( fopen ,fread ,filesize,fwrite,fclose ) 2.unlink()  rmdir() 删除函数 unlink(路径和文件名): rmdi ...

  3. Android学习日记

    1.[2013-10-03 13:45:38 - FileManager] res\drawable-xxhdpi\FileManager.jpg: Invalid file name: must c ...

  4. JS中的数据类型检测

    JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type).原始类型有5种,分别是:数字(Number).字符串(String).布尔值(Bo ...

  5. onethinkp导入excel

    /** * Excel导入函数 * @author crx349 */ if (!empty($_FILES)) { $config = array( 'maxSize' => 3145728, ...

  6. Three.Js学习第一天

    因为工作需求,最近接触到了ThreeJs库,国内学习文档的确少,所以在这里写下bolgs记录学习史,并且给后面学习的人尽一份微博之力. 3D场景依靠WebGL技术.目前支持比较好的浏览器,谷歌.火狐. ...

  7. PHP store session with couchbase

    如何用couchbase存储session 有两种常见方式:1.采用memcache模式连接couchbase 只需两句修改: ini_set('session.save_handler', 'mem ...

  8. Java泛型学习笔记 - (一)泛型的介绍

    一.什么是泛型:泛型的作用是用来规定一个类, 接口或方法所能接受的数据的类型. 就像在声明方法时指定参数一样, 我们在声明一个类, 接口或方法时, 也可以指定其"类型参数", 也就 ...

  9. Qt5.5中,使MainWindow初始为全屏

    MainWindow w; w.showMaximized(); 实例化后,初始显示设置为最大格式即可!

  10. j2ee学习资料收集

    1    tomcat web.xml加载顺序,  讲解了web.xml什么时候加载,内部的各个组件加载的顺序 http://blog.sina.com.cn/s/blog_4553489c01010 ...