zoukankan      html  css  js  c++  java
  • oracle case when 语句的用法详解

    1. CASE WHEN 表达式有两种形式

    复制代码代码如下:

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


    2. CASE WHEN 在语句中不同位置的用法
    2.1 SELECT CASE WHEN 用法

    复制代码代码如下:

    SELECT   grade, COUNT (CASE WHEN sex = 1 THEN 1      /*sex 1为男生,2位女生*/
                           ELSE NULL
                           END) 男生数,
                    COUNT (CASE WHEN sex = 2 THEN 1
                           ELSE NULL
                           END) 女生数
        FROM students GROUP BY grade;


    2.2 WHERE CASE WHEN 用法

    复制代码代码如下:

    SELECT T2.*, T1.*
       FROM T1, T2
      WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND
                       T1.SOME_TYPE LIKE 'NOTHING%'
                    THEN 1
                  WHEN T2.COMPARE_TYPE != 'A' AND
                       T1.SOME_TYPE NOT LIKE 'NOTHING%'
                    THEN 1
                  ELSE 0
               END) = 1


    2.3 GROUP BY CASE WHEN 用法

    复制代码代码如下:

    SELECT  
    CASE WHEN salary <= 500 THEN '1'  
    WHEN salary > 500 AND salary <= 600  THEN '2'  
    WHEN salary > 600 AND salary <= 800  THEN '3'  
    WHEN salary > 800 AND salary <= 1000 THEN '4'  
    ELSE NULL END salary_class, -- 别名命名
    COUNT(*)  
    FROM    Table_A  
    GROUP BY  
    CASE WHEN salary <= 500 THEN '1'  
    WHEN salary > 500 AND salary <= 600  THEN '2'  
    WHEN salary > 600 AND salary <= 800  THEN '3'  
    WHEN salary > 800 AND salary <= 1000 THEN '4'  
    ELSE NULL END;  


    3.关于IF-THEN-ELSE的其他实现
    3.1 DECODE() 函数

    复制代码代码如下:

    select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
    from   employees;


    貌似只有Oracle提供该函数,而且不支持ANSI SQL,语法上也没CASE WHEN清晰,个人不推荐使用。
    3.2 在WHERE中特殊实现

    复制代码代码如下:

    SELECT T2.*, T1.*
       FROM T1, T2
      WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%')
             OR
            (T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')


    这种方法也是在特殊情况下使用,要多注意逻辑,不要弄错。

    转载来源:http://www.jb51.net/article/37570.htm

  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/wllcs/p/6235812.html
Copyright © 2011-2022 走看看