case具有两种格式。简单case函数和case搜索函数。

  1. Ctrl+C 复制代码

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

  1. --比如说,下面这段sql,你永远无法得到“第二类”这个结果
  2. case when col_1 in ('a','b') then '第一类'
  3. when col_1 in ('a') then '第二类'
  4. else '其他' end

下面实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:

  1. SQL> drop table users purge;
  2.  
  3. drop table users purge
  4.  
  5. ORA-00942: 表或视图不存在
  6. SQL> create table users(id int,name varchar2(20),sex number);
  7.  
  8. Table created
  9. SQL> insert into users(id,name) values(1,'张一');
  10.  
  11. 1 row inserted
  12. SQL> insert into users(id,name,sex) values(2,'张二',1);
  13.  
  14. 1 row inserted
  15. SQL> insert into users(id,name) values(3,'张三');
  16.  
  17. 1 row inserted
  18. SQL> insert into users(id,name) values(4,'张四');
  19.  
  20. 1 row inserted
  21. SQL> insert into users(id,name,sex) values(5,'张五',2);
  22.  
  23. 1 row inserted
  24. SQL> insert into users(id,name,sex) values(6,'张六',1);
  25.  
  26. 1 row inserted
  27. SQL> insert into users(id,name,sex) values(7,'张七',2);
  28.  
  29. 1 row inserted
  30. SQL> insert into users(id,name,sex) values(8,'张八',1);
  31.  
  32. 1 row inserted
  33. SQL> commit;
  34.  
  35. Commit complete
  36. SQL> select * from users;
  37.  
  38. ID NAME SEX
  39. --------------------------------------- -------------------- ----------
  40. 1 张一
  41. 2 张二 1
  42. 3 张三
  43. 4 张四
  44. 5 张五 2
  45. 6 张六 1
  46. 7 张七 2
  47. 8 张八 1
  48.  
  49. 8 rows selected

1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:

  1. SQL> select u.id,u.name,u.sex,
  2. 2 (case u.sex
  3. 3 when 1 then '男'
  4. 4 when 2 then '女'
  5. 5 else '空的'
  6. 6 end
  7. 7 )性别
  8. 8 from users u;
  9.  
  10. ID NAME SEX 性别
  11. --------------------------------------- -------------------- ---------- ------
  12. 1 张一 空的
  13. 2 张二 1
  14. 3 张三 空的
  15. 4 张四 空的
  16. 5 张五 2
  17. 6 张六 1
  18. 7 张七 2
  19. 8 张八 1
  20.  
  21. 8 rows selected

2、如果不希望列表中出现"sex"列,语句如下:

  1. SQL> select u.id,u.name,
  2. 2 (case u.sex
  3. 3 when 1 then '男'
  4. 4 when 2 then '女'
  5. 5 else '空的'
  6. 6 end
  7. 7 )性别
  8. 8 from users u;
  9.  
  10. ID NAME 性别
  11. --------------------------------------- -------------------- ------
  12. 1 张一 空的
  13. 2 张二
  14. 3 张三 空的
  15. 4 张四 空的
  16. 5 张五
  17. 6 张六
  18. 7 张七
  19. 8 张八
  20.  
  21. 8 rows selected

3、将sum与case结合使用,可以实现分段统计。
     如果现在希望将上表中各种性别的人数进行统计,sql语句如下:

  1. SQL> select
  2. 2 sum(case u.sex when 1 then 1 else 0 end)男性,
  3. 3 sum(case u.sex when 2 then 1 else 0 end)女性,
  4. 4 sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
  5. 5 from users u;
  6.  
  7. 男性 女性 性别为空
  8. ---------- ---------- ----------
  9. 3 2 0
  10.  
  11. --------------------------------------------------------------------------------
  12. SQL> select
  13. 2 count(case when u.sex=1 then 1 end)男性,
  14. 3 count(case when u.sex=2 then 1 end)女,
  15. 4 count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
  16. 5 from users u;
  17.  
  18. 男性 性别为空
  19. ---------- ---------- ----------
  20. 3 2 0
 

SQL之case when then用法的更多相关文章

  1. 【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...

  2. SQL中case when then用法

    sql语句判断方式之一Case.具有两种格式:简单的Case函数.Case搜索函数. 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' E ...

  3. sql server Case when 的用法

    sql Case 仅仅返回第一个符合条件的值,剩下的Case部分将会被自动忽略. Case 的使用有两种格式:简单Case函数和Case搜索函数. 简单Case 函数: Case sex when ' ...

  4. SQL之case when then用法(用于分类统计)

    case具有两种格式.简单case函数和case搜索函数. --简单case函数 case sex when '1' then '男' when '2' then '女’ else '其他' end ...

  5. SQL之case when then用法详解

    case具有两种格式.简单case函数和case搜索函数. <span style="font-size:14px;">--简单case函数 case sex when ...

  6. SQL Server case表达式的用法

    ★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...

  7. SQL之case when then用法_之二

    select CustomerNo, Name, Sex, Birthday, IDType, IDNo, validityday, case (null ) when '1' then '高级VIP ...

  8. SQL进阶1:case表达式的用法示例

    一:case表达式的用法 1.SQL中的case表达式的作用是用来对"某个变量"进行某种转化,通常在select字句中使用,举个例子: 不能看出,case表达式很像我们的if el ...

  9. SQL:select case when 的用法

    CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...

随机推荐

  1. 页面制作之HTML

    标签 常用属性 id class style title - <a href ="/" title="收藏">收藏</a>(用于hove ...

  2. Proxy setting

    1. git git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080 2. gradleScena ...

  3. 前馈网络求导概论(一)·Softmax篇

    Softmax是啥? Hopfield网络的能量观点 1982年的Hopfiled网络首次将统计物理学的能量观点引入到神经网络中, 将神经网络的全局最小值求解,近似认为是求解热力学系统的能量最低点(最 ...

  4. dom4j解析示例

    收藏信息.xml <?xml version="1.0" encoding="GB2312" standalone="no"?> ...

  5. 创建WP8试用应用

    参考资料: 创建 Windows Phone 的试用应用 如何在 Windows Phone 应用中实现试用体验 Windows Phone 7 开发 31 日谈——第23日:提供试用版应用程序 对资 ...

  6. Angular 单元格合并

    在Angular实现表格输出的话,使用ng-repeat输出信息, 使用了: ng-repeat-start ng-repeat-end ng-hide="$first" < ...

  7. jsp使用EL表达式回传boolean值出错的问题

    在最近做的一个项目中使用session回传的属性中有一个为boolean,报出错. 属性名字为"isAdmit",布尔类型.后来我上网查了一下,是因为我使用了Myeclipse的自 ...

  8. js库之dojo

    使用dojo源代码 1.下载Dojo 2.dojo目录结构如下 demo/ myModule.js dojo/ dijit/ dojox/ util/ hellodojo.html 3.引入dojo. ...

  9. Nginx 配置从零开始

    作为一个 nginx 的初学者记录一下从零起步的点滴. 基本概念 Nginx 最常的用途是提供反向代理服务,那么什么反向代理呢?正向代理相信很多大陆同胞都在这片神奇的土地上用过了,原理大致如下图: 代 ...

  10. Ubuntu安装c++编译器

    打开终端输入sudo apt-get install build-essential 安装gcc和一些库函数.提供C/C++的编译环境 注意编译c++程序要用g++