Oracle CASE WHEN 用法介绍

标签: oracle case when | 发表时间:2012-07-05 08:48 | 作者:jianhuili
出处:http://blog.csdn.net

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.3 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.4 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%')

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

作者:jianhuili 发表于2012-7-5 8:48:56 原文链接
阅读:0 评论:0 查看评论

相关 [oracle case when] 推荐:

Oracle CASE WHEN 用法介绍

- - CSDN博客推荐文章
Oracle CASE WHEN 用法介绍. CASE WHEN 表达式有两种形式. CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END. CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END.

一个InnoDB性能超过Oracle的调优Case

- - P.Linux Laboratory
年前抽空到兄弟公司支援了一下Oracle迁移MySQL的测试,本想把MySQL调优到接近Oracle的性能即可,但经过 @何_登成 @淘宝丁奇 @淘宝褚霸 @淘伯松 诸位大牛的指导和帮助(排名不分先后,仅按第一次为此CASE而骚扰的时间排序),不断修正方案,最终获得了比Oracle更好的性能,虽然是个特殊场景,但是我觉得意义是很广泛的,值得参考,遂记录于此.

oracle函数之case和decode的用法区别及性能比较

- - BlogJava-首页技术区
   在oracle世界,你可以使用:.     1)case表达式      或者.     2)decode函数. Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能. 而CASE是9i以后提供的语法,这个语法更加的灵活,提供了IF THEN ELSE的功能.

一个GC频繁的Case

- loudly - BlueDavy之技术Blog
前两天碰到一个很诡异的GC频繁的现象,走了不少弯路,N种方法查找后才终于查明原因了,在这篇blog中记录下,以便以后碰到这类问题时能更快的解决. 前两天一位同学找到我,说有个应用在启动后就一直Full GC,拿到GC log先看了下,确实是非常的诡异,截取的部分log如下:. 这个日志中诡异的地方在于每次Full GC的时候旧生代都还有很多的空间,于是去看来下启动参数,此时的启动参数如下:.

烤鱼铅笔袋:Grilled Fish Pencil Case

- Robert - 爱…稀奇~{新鲜:科技:创意:有趣}
这是各种烧烤和夜啤酒爱好者的最佳装备:烤鱼铅笔袋(Grilled Fish Pencil Case),当然也可以当手袋用,放点文具、尺子或者最爱的化妆品甚至是套套,都能彪悍得炭烧味四射,由不得周围人侧目而视~2480日元一个,从内文中的细部图来看,做工相当不错的说. 亲爱的,这些东西也会对你胃口:.

i-Camera Case 超逼真立体相机iPhone壳

- 电饭锅 - 设计|生活|发现新鲜
超有趣仿真相机iPhone4外壳到货啦,超精致细节,迄今最逼真的立体效果,绝对萌翻天. 高仿真设计,镜头部可以调节,拉出后可以作为支架斜立于桌面. 黑白、白色、粉色、绿色四色可选,点此购买. 颜色:黑色,白色,粉色,绿色. 规格:W12.3cm x D3cm x H6.7cm. 「设计,生活,发现新鲜」在新浪微博,更即时地获读更新,更直接地交流沟通.

「拍!搞定!」Graft Concepts 推出为 iPhone 4 而设的 Leverage Case

- Mr.aa - Engadget 中国版
相信 iPhone 4 的用户们都不会对 Blade Element 和 Deff Cleave 等金属制的 Bumper 感到陌生;但它们都有一个通病,就是在套上手机的过程中要上好几颗螺丝,很不方便呢. 不过 Graft Concepts 为 iPhone 4 而设的 Leverage Case 就不同了,因为它在套上 iPhone 后只要「拍」一声扣上右上角的金属机关便能套紧手机.

深入JVM彻底剖析前面ygc越来越慢的case

- - HelloJava微信公众账号网站
阿里JVM团队的同学帮助从JVM层面继续深入的剖析了下前面那个ygc越来越慢的case,分析文章相当的赞,思路清晰,工具熟练,JVM代码熟练,请看这位同学(阿里JVM团队:寒泉子)写的文章,我转载到这. 虽然这个demo代码逻辑很简单,但是其实这是一个特殊的demo,并不简单,如果我们将XStream对象换成Object对象,会发现不存在这个问题,既然如此那有必要进去看看这个XStream的构造函数(请大家直接翻XStream的代码,这里就不贴了).

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.