CASE WHEN 及 SELECT CASE WHEN的用法

sql中的CASE WHEN then 也可以理解为程序中的三元表达式,可以实现相同的功能,不过CASE WHEN then功能更强大

示例一

简单Case函数

CASE sex

WHEN ‘1‘ THEN ‘男‘

WHEN ‘2‘ THEN ‘女‘

ELSE ‘其他‘ END

--Case搜索函数

CASE WHEN sex = ‘1‘ THEN ‘男‘

WHEN sex = ‘2‘ THEN ‘女‘

ELSE ‘其他‘ END

示例二

根据这个国家人口数据,统计亚洲和北美洲的人口数量

如果使用Case函数,SQL代码如下:

SELECT  SUM(population),

CASE country  WHEN ‘中国‘ THEN ‘亚洲‘

WHEN ‘印度‘ THEN ‘亚洲‘

WHEN ‘日本‘ THEN ‘亚洲‘

WHEN ‘美国‘ THEN ‘北美洲‘

WHEN ‘加拿大‘  THEN ‘北美洲‘

WHEN ‘墨西哥‘  THEN ‘北美洲‘

ELSE ‘其他‘ END

FROM    Table_A

GROUP BY

CASE country

WHEN ‘中国‘ THEN ‘亚洲‘

WHEN ‘印度‘ THEN ‘亚洲‘

WHEN ‘日本‘ THEN ‘亚洲‘

WHEN ‘美国‘ THEN ‘北美洲‘

WHEN ‘加拿大‘   THEN ‘北美洲‘

WHEN ‘墨西哥‘   THEN ‘北美洲‘

ELSE ‘其他‘ END;

示例三

用一个SQL语句完成不同条件的分组。

按照国家和性别进行分组

SELECT country,

SUM( CASE WHEN sex = ‘1‘ THEN  population ELSE 0 END),  --男性人口

SUM( CASE WHEN sex = ‘2‘ THEN  population ELSE 0 END)   --女性人口

FROM  Table_A  GROUP BY country;

示例四

两个表数据是否一致的检查。

在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等

Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。
下面具个例子来说明,有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果在tbl_B的keyCol列的数据中可以找到,返回结果‘Matched‘,如果没有找到,返回结果‘Unmatched‘。
要实现下面这个功能,可以使用下面两条语句

--使用IN的时候

SELECT keyCol,

CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )  THEN ‘Matched‘

ELSE ‘Unmatched‘ END Label

FROM tbl_A;

--使用EXISTS的时候
SELECT keyCol,
CASE WHEN EXISTS ( SELECT * FROM tbl_B WHERE tbl_A.keyCol = tbl_B.keyCol ) THEN ‘Matched‘ ELSE ‘Unmatched‘ END Label
FROM tbl_A;

总结

select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。

时间: 2024-08-22 05:52:15

CASE WHEN 及 SELECT CASE WHEN的用法的相关文章

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

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搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要

CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就完成了, 哎)

转自:http://blog.sina.com.cn/s/blog_4c538f6c01012mzt.html 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     种方式,可以实现相同的功能.

select case when if 的一些用法

概述:sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其语法格式如下: CASE   <单值表达式>        WHEN <表达式值> THEN <SQL语句或者返回值>        WHEN <表达式值> THEN <SQL语句或者返回值>        ...        WHEN <表

Oracle 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搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要

select case when

SELECT CASE WHEN dc.defect_code_name IS NOT NULL THEN dc.defect_code_name WHEN sf.second_defect_level_name IS NOT NULL THEN sf.second_defect_level_name WHEN fd.first_defect_level_name IS NOT NULL THEN fd.first_defect_level_name ELSE '' END FROM dual)

浅谈case语句与select语句

case语句与select语句 case语句: 多分支if语句: if CONDITION1;then 分支1 elif CONDITION2;then 分支2 ... else CONDITION;then 分支n fi 例如下面这段代码,我们可以使用while语句内嵌套if语句实现, #!/bin/bash cat << EOF cpu) display cpu information mem) display memory information disk) display disks

SQL的case when then else end语句的用法

SELECT a.managecom, a.subtype, count(*) loadsucc, sum(case when a.state in ('4', '5', '6', '7', '8', '9') then 1 else 0 end) recogsucc, sum(case when a.state in ('3', '12', '13') then 1 else 0 end) recogfail, sum(case when a.state in ('1', '2') then

SELECT CASE 语句使用方法

SELECT CASE 语句 ****** select id ,'sexNo'= case when sex='先生' then 2 when sex='女士' then 3 else 1 end ,age FROM [ comsiterefer] SELECT CASE 语句使用方法