文档章节

Oracle CASE WHEN的一些使用

gulf
 gulf
发布于 2017/04/21 20:01
字数 406
阅读 4
收藏 0

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%')


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

 

© 著作权归作者所有

共有 人打赏支持
gulf
粉丝 13
博文 277
码字总数 156947
作品 0
广州
程序员
私信 提问
PLSQL 之类型、变量和结构

1、类型 在《.Net程序员学用Oracle系列(5):三大数据类型》一文中详细地讲述了 Oracle 的基本数据类型,文中还提到,除基本数据类型之外,Oracle 还在语法上支持一些非固有数值类型。 事实上...

技术小阿哥
2017/11/05
0
0
oracle函数之case和decode的用法区别及性能比较

在oracle世界,你可以使用: 1)case表达式 或者 2)decode函数 来实现逻辑判断。Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能。而CASE是9i以后提供的语法...

长平狐
2012/09/19
196
0
调试经验——使用Oracle CASE WHEN表达式实现对查询结果的二次处理(Customization of dataset retrieved using CASE WHEN function)

/ Formatted on 2018/5/20 23:11:17 (QP5 v5.256.13226.35538) /SELECT CASE FROM DUAL; to invoke procedures. which expr is equal to comparisonexpr and returns returnexpr. If none of......

hpdlzu80100
2018/05/20
0
0
ORACLE调用接口(OCI)中对象类型转化器(OTT)的使用

OTT是OCI中访问对象类型数据的一个非常重要的工具,它将数据库中的对象类型或几何对象映射为C语言中的结构体,供OCI程序使用。在所有的支持oracle的操作系统中,OTT工具是以命令行方式工作的...

长平狐
2013/12/25
194
0
Oracle CASE WHEN 用法介绍

CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' E......

zh119893
2013/06/19
127
0

没有更多内容

加载失败,请刷新页面

加载更多

sql根据日期查询,本周,本月,本年,今日相关统计

sql根据日期查询,本周,本月,本年,今日相关统计 昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, 时间字段 ,getdate()) = ...

BraveLN
23分钟前
2
0
Delphi 折叠代码编译变量$REGION

编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm1.Button1Click(Sender: TObject); var uStr: UnicodeString; begin {$REGION '显示uStr变量内容'} ......

dillonxiao
24分钟前
1
0
【更新】SyntaxEditor发布v2018.1,可共享相同代码库

SyntaxEditor最新版本下载 SyntaxEditor是一款强大的代码语法检验控件,采用了当今最前沿的代码编辑的技术,可以为你代码编辑提供强大的管理功能。最新版支持Visual Studio 2013和Windows 8...

电池盒
24分钟前
1
0
如何在基于Bytom开发过程中集成IPFS

本文介绍了基于Bytom开发过程中集成IPFS。 step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建bytom节点有很多方式,然后开启RPC调用模式。这里推荐用...

比原链Bytom
29分钟前
0
0
sqlyog注册码

sqlyog注册码 1.方式一 用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417 a56ea5da-f30b-4fb1-8a05-95f346a9b20b a0fe8645-3916-45d4-9976-cb6b88fecc6c b70d7f66-dac2-4462-......

dragon_tech
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部