oracle case when 语句的用法详解

 更新时间:2013年05月29日 18:03:47   作者:  
本篇文章是对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%')

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

相关文章

  • ORACLE应用经验(2)

    ORACLE应用经验(2)

    ORACLE应用经验(2)...
    2007-03-03
  • Oracle中dbms_output.put_line的用法实例

    Oracle中dbms_output.put_line的用法实例

    最近写了oracle过程,有个ORACLE中dbms_output.put_line的相关问题,所以下面这篇文章主要给大家介绍了关于Oracle中dbms_output.put_line的用法实例,需要的朋友可以参考下
    2022-06-06
  • 关于Oracle多表连接,提高效率,性能优化操作

    关于Oracle多表连接,提高效率,性能优化操作

    这篇文章主要介绍了关于Oracle多表连接,提高效率,性能优化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Oracle查询优化之高效实现仅查询前10条记录的方法与实践

    Oracle查询优化之高效实现仅查询前10条记录的方法与实践

    这篇文章主要介绍了Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FETCH FIRST(适用于Oracle12c及以上版本)以及LIMIT风格(仅适用于兼容模式),需要的朋友可以参考下
    2025-01-01
  • Oracle DG 的归档缺失修复方法

    Oracle DG 的归档缺失修复方法

    文章介绍了Oracle DG归档缺失的修复方法,包括检查归档同步情况、查看GAP日志应用情况以及不同的修复思路,如归档还在主库、归档已在备库或归档已被删除等,感兴趣的朋友一起看看吧
    2025-02-02
  • Oracle学习笔记之视图及索引的使用

    Oracle学习笔记之视图及索引的使用

    这篇文章主要介绍了Oracle学习笔记之视图及索引的使用,视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询
    2022-07-07
  • oracle case when 语句的用法详解

    oracle case when 语句的用法详解

    本篇文章是对oracle case when 语句的用法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Oracle删除死锁进程的方法

    Oracle删除死锁进程的方法

    这篇文章主要介绍了Oracle删除死锁进程的方法,涉及查找被锁表及删除对应进程的技巧,需要的朋友可以参考下
    2015-01-01
  • [Oracle] 浅析令人抓狂的ORA-01555问题

    [Oracle] 浅析令人抓狂的ORA-01555问题

    首先要说明的一点是:ORA-01555错误是一个“安全”的错误,它不会造成数据丢失或损坏,只是会让接收到该错误的查询无法继续。以下就是对发生ORA-01555错误的原因进行了介绍,需要的朋友可以参考下
    2013-07-07
  • Oracle中的序列SEQUENCE详解

    Oracle中的序列SEQUENCE详解

    本文详细讲解了Oracle中的序列SEQUENCE,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论