惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
博客园 - 聂微东
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
L
LangChain Blog
I
InfoQ
T
Tailwind CSS Blog
博客园 - 【当耐特】
V
V2EX
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
Vercel News
Vercel News
雷峰网
雷峰网
量子位
A
About on SuperTechFans
Martin Fowler
Martin Fowler
H
Help Net Security

博客园 - playman0211

UE蓝图---实现场景物体Transform状态重置效果 【转】读取系统时间和时间戳【UE4】【C++】 关于Unity中关节的使用(一) Unity --- 关节组件 C# CRC16算法实现【转】 IhyerDB modBus采集器配置. 简单理解C#中的抽象工厂模式是什么概念! C# 进制转换(二进制、十六进制、十进制互转) 软件加密锁编程技巧【转】 C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集 Gjhf c#格式化数字(转) oracle数据库删除数据Delete语句和Truncate语句的对比 用Instant client批量安装Oracle客户端-安装配置 C#使用instantclient连接 Oracle 10g (转) InstantClient安装使用 (转) oracle case when的使用方法 C# 读写ini文件 【转】 SQL Server CONVERT() 函数
Oracle case when 用法(转)
playman0211 · 2013-03-04 · via 博客园 - playman0211

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

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

来自:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html