zoukankan      html  css  js  c++  java
  • CASE WHEN 及 SELECT CASE WHEN的用法

    sql中的CASE WHEN then 也可以理解为程序中的三元表达式,可以实现相同的功能,不过CASE WHEN then功能更强大

    示例一

    简单Case函数
    CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
    ELSE '其他' END
     
    --Case搜索函数 
    CASE WHEN sex = '1' THEN '男' 
    WHEN sex = '2' THEN '女' 
    ELSE '其他' END  

    示例二

    根据这个国家人口数据,统计亚洲和北美洲的人口数量

    如果使用Case函数,SQL代码如下:

    SELECT  SUM(population), 
    CASE country  WHEN '中国' THEN '亚洲' 
      WHEN '印度' THEN '亚洲' 
      WHEN '日本' THEN '亚洲' 
      WHEN '美国' THEN '北美洲' 
      WHEN '加拿大'  THEN '北美洲' 
      WHEN '墨西哥'  THEN '北美洲' 
    ELSE '其他' END 
    FROM    Table_A 
    GROUP BY
    CASE country 
    WHEN '中国' THEN '亚洲' 
    WHEN '印度' THEN '亚洲'
    WHEN '日本' THEN '亚洲' 
    WHEN '美国' THEN '北美洲' 
    WHEN '加拿大'   THEN '北美洲' 
    WHEN '墨西哥'   THEN '北美洲' 
    ELSE '其他' END

    示例三

    用一个SQL语句完成不同条件的分组。

    按照国家和性别进行分组

    SELECT country, 
    SUM( CASE WHEN sex = '1' THEN  population ELSE 0 END),  --男性人口 
    SUM( CASE WHEN sex = '2' THEN  population ELSE 0 END)   --女性人口
    FROM  Table_A  GROUP BY country; 

    示例四

    两个表数据是否一致的检查。

     在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等

    Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。
    下面具个例子来说明,有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果在tbl_B的keyCol列的数据中可以找到,返回结果'Matched',如果没有找到,返回结果'Unmatched'。
    要实现下面这个功能,可以使用下面两条语句
    --使用IN的时候 
    SELECT keyCol, 
    CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )  THEN 'Matched' 
    ELSE 'Unmatched' END Label 
    FROM tbl_A; 

    --使用EXISTS的时候
    SELECT keyCol,
    CASE WHEN EXISTS ( SELECT * FROM tbl_B WHERE tbl_A.keyCol = tbl_B.keyCol ) THEN 'Matched' ELSE 'Unmatched' END Label
    FROM tbl_A;

    总结

    select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。

  • 相关阅读:
    禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
    遭遇EventSystem服务问题
    软件工程师遭遇硬件故障RAID5两块硬盘离线
    Pocket Player睡眠定时器不能选择问题的解决办法
    借助RamDisk让你的FireFox飞起来
    NVS4200M显卡“超频”
    Python数据类型
    Python变量
    端口及对应服务
    Python基础(1)
  • 原文地址:https://www.cnblogs.com/starts/p/5087387.html
Copyright © 2011-2022 走看看