zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle CASE WHEN 用法介绍

Oracle 介绍 用法 when case
2023-09-27 14:28:16 时间
--简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASEWHEN sex = 1 THEN 男 WHEN sex = 2 THEN 女 ELSE 其他 END
复制代码
--简单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%)

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