Oracle CASE WHEN

Oracle CASE WHEN 用法介绍

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

--简单Case函数  

CASE sex  WHEN ‘1‘ THEN ‘男‘  WHEN ‘2‘ THEN ‘女‘  ELSE ‘其他‘ END  

--Case搜索函数  

CASEWHEN 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%‘)

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

时间: 2024-10-27 05:04:59

Oracle CASE WHEN的相关文章

Oracle CASE WHEN 用法介绍

Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT gra

Oracle Case When的妙用

Case when 的用法 --简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result1 WHEN expression2 THEN result2 ... WHEN expressionN THEN resultN ELSE default_result --搜索CASE表达式 使用条件确定返回值. 语法: CASE WHEN condition1 THEN result1 W

ORACLE CASE WHEN 及 SELECT CASE WHEN的使用方法

CASE 语句 CASE selector   WHEN value1 THEN action1;   WHEN value2 THEN action2;   WHEN value3 THEN action3;   …..   ELSE actionN;END CASE; CASE表达式 DECLARE   temp VARCHAR2(10);   v_num number;BEGIN   v_num := &i;   temp := CASE v_num     WHEN 0 THEN 'Ze

学习SQL日记(八)--ORACLE CASE WHEN

Ⅰ. ORACLE  WHERE 字句里面使用CASE WHEN 25行 Ⅱ.  嵌套使用 CASE WHEN  2~13行 1 SELECT 2 SUM(CASE WHEN M.MV_AVG < 800 AND C.THICKNESS >= 0.5 AND C.THICKNESS <= 0.9 THEN (CASE WHEN D.MV_AVG = 0 OR D.MV_AVG IS NULL THEN 0 ELSE P.LENGTH / D.MV_AVG END ) END ) R1CD

oracle:case when 语句的区间用法

在练习case when 语句时,碰到一个例子,结果答案根本就不对,语法就通不过,开始想着是不是case 只能是一个固定的取值,毕竟例子内给的都是case是个固定的值,后来网上查了好久才发现还有区间的用法,下面附带例子 背景是Scott用户下面的EMP表(oracle创建时默认自带的) 算出每个部门,每个职位的平均工资和平均奖金(平均值包括没有奖金)如果平均奖金大于300,显示'奖金不错',如果平均奖金100到300,显示'奖金一般',如果平均奖金小于100,显示“基本没有奖金”,按部门编号降序

Oracle --case、while、loop、for

1.  oracle中case表达式 (case  条件         when  表达式1  then  结果1         when  表达式2  then  结果2        [else  结果n] end) as 别名 2.  简单循环loop loop         要执行的语句;         exit  when<条件>  /*条件满足,退出循环语句*/ end loop; 实际例子 loop         v_tmp := v_tmp + 1;         

oracle case where 复杂sql语句

update hr_user u set u.is_approve=(case when u.curr_org_id in (select t.org_id from hr_organization t start with t.org_id = 10001263 connect by prior org_id = t.org_id_parent) then 'N' ELSE 'Y' END); update hr_user u set u.is_approve=(case when u.cur

ORACLE CASE WHEN 及 SELECT CASE WHEN的用法

Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要

oracle case when 在查询时候的用法。

select count(1), features_level from (SELECT i.features_level, i.features, T.BASEAMINE_ID, T.COLUMN_NAME, V.COLUMN_VALUE, V.DETAIL_ID, (case when i.features = '计数' AND V.COLUMN_VALUE = 'NG' then 0 when (i.features = '计量' AND V.COLUMN_VALUE <> '-') a