SQL之case when then用法
case具有两种格式。简单case函数和case搜索函数。
- 按 Ctrl+C 复制代码
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
- --比如说,下面这段sql,你永远无法得到“第二类”这个结果
- case when col_1 in ('a','b') then '第一类'
- when col_1 in ('a') then '第二类'
- else '其他' end
下面实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:
- SQL> drop table users purge;
- drop table users purge
- ORA-00942: 表或视图不存在
- SQL> create table users(id int,name varchar2(20),sex number);
- Table created
- SQL> insert into users(id,name) values(1,'张一');
- 1 row inserted
- SQL> insert into users(id,name,sex) values(2,'张二',1);
- 1 row inserted
- SQL> insert into users(id,name) values(3,'张三');
- 1 row inserted
- SQL> insert into users(id,name) values(4,'张四');
- 1 row inserted
- SQL> insert into users(id,name,sex) values(5,'张五',2);
- 1 row inserted
- SQL> insert into users(id,name,sex) values(6,'张六',1);
- 1 row inserted
- SQL> insert into users(id,name,sex) values(7,'张七',2);
- 1 row inserted
- SQL> insert into users(id,name,sex) values(8,'张八',1);
- 1 row inserted
- SQL> commit;
- Commit complete
- SQL> select * from users;
- ID NAME SEX
- --------------------------------------- -------------------- ----------
- 1 张一
- 2 张二 1
- 3 张三
- 4 张四
- 5 张五 2
- 6 张六 1
- 7 张七 2
- 8 张八 1
- 8 rows selected
1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
- SQL> select u.id,u.name,u.sex,
- 2 (case u.sex
- 3 when 1 then '男'
- 4 when 2 then '女'
- 5 else '空的'
- 6 end
- 7 )性别
- 8 from users u;
- ID NAME SEX 性别
- --------------------------------------- -------------------- ---------- ------
- 1 张一 空的
- 2 张二 1 男
- 3 张三 空的
- 4 张四 空的
- 5 张五 2 女
- 6 张六 1 男
- 7 张七 2 女
- 8 张八 1 男
- 8 rows selected
2、如果不希望列表中出现"sex"列,语句如下:
- SQL> select u.id,u.name,
- 2 (case u.sex
- 3 when 1 then '男'
- 4 when 2 then '女'
- 5 else '空的'
- 6 end
- 7 )性别
- 8 from users u;
- ID NAME 性别
- --------------------------------------- -------------------- ------
- 1 张一 空的
- 2 张二 男
- 3 张三 空的
- 4 张四 空的
- 5 张五 女
- 6 张六 男
- 7 张七 女
- 8 张八 男
- 8 rows selected
3、将sum与case结合使用,可以实现分段统计。
如果现在希望将上表中各种性别的人数进行统计,sql语句如下:
- SQL> select
- 2 sum(case u.sex when 1 then 1 else 0 end)男性,
- 3 sum(case u.sex when 2 then 1 else 0 end)女性,
- 4 sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
- 5 from users u;
- 男性 女性 性别为空
- ---------- ---------- ----------
- 3 2 0
- --------------------------------------------------------------------------------
- SQL> select
- 2 count(case when u.sex=1 then 1 end)男性,
- 3 count(case when u.sex=2 then 1 end)女,
- 4 count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
- 5 from users u;
- 男性 女 性别为空
- ---------- ---------- ----------
- 3 2 0
SQL之case when then用法的更多相关文章
- 【SQL】SQL中Case When的用法
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...
- SQL中case when then用法
sql语句判断方式之一Case.具有两种格式:简单的Case函数.Case搜索函数. 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' E ...
- sql server Case when 的用法
sql Case 仅仅返回第一个符合条件的值,剩下的Case部分将会被自动忽略. Case 的使用有两种格式:简单Case函数和Case搜索函数. 简单Case 函数: Case sex when ' ...
- SQL之case when then用法(用于分类统计)
case具有两种格式.简单case函数和case搜索函数. --简单case函数 case sex when '1' then '男' when '2' then '女’ else '其他' end ...
- SQL之case when then用法详解
case具有两种格式.简单case函数和case搜索函数. <span style="font-size:14px;">--简单case函数 case sex when ...
- SQL Server case表达式的用法
★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...
- SQL之case when then用法_之二
select CustomerNo, Name, Sex, Birthday, IDType, IDNo, validityday, case (null ) when '1' then '高级VIP ...
- SQL进阶1:case表达式的用法示例
一:case表达式的用法 1.SQL中的case表达式的作用是用来对"某个变量"进行某种转化,通常在select字句中使用,举个例子: 不能看出,case表达式很像我们的if el ...
- SQL:select case when 的用法
CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...
随机推荐
- 页面制作之HTML
标签 常用属性 id class style title - <a href ="/" title="收藏">收藏</a>(用于hove ...
- Proxy setting
1. git git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080 2. gradleScena ...
- 前馈网络求导概论(一)·Softmax篇
Softmax是啥? Hopfield网络的能量观点 1982年的Hopfiled网络首次将统计物理学的能量观点引入到神经网络中, 将神经网络的全局最小值求解,近似认为是求解热力学系统的能量最低点(最 ...
- dom4j解析示例
收藏信息.xml <?xml version="1.0" encoding="GB2312" standalone="no"?> ...
- 创建WP8试用应用
参考资料: 创建 Windows Phone 的试用应用 如何在 Windows Phone 应用中实现试用体验 Windows Phone 7 开发 31 日谈——第23日:提供试用版应用程序 对资 ...
- Angular 单元格合并
在Angular实现表格输出的话,使用ng-repeat输出信息, 使用了: ng-repeat-start ng-repeat-end ng-hide="$first" < ...
- jsp使用EL表达式回传boolean值出错的问题
在最近做的一个项目中使用session回传的属性中有一个为boolean,报出错. 属性名字为"isAdmit",布尔类型.后来我上网查了一下,是因为我使用了Myeclipse的自 ...
- js库之dojo
使用dojo源代码 1.下载Dojo 2.dojo目录结构如下 demo/ myModule.js dojo/ dijit/ dojox/ util/ hellodojo.html 3.引入dojo. ...
- Nginx 配置从零开始
作为一个 nginx 的初学者记录一下从零起步的点滴. 基本概念 Nginx 最常的用途是提供反向代理服务,那么什么反向代理呢?正向代理相信很多大陆同胞都在这片神奇的土地上用过了,原理大致如下图: 代 ...
- Ubuntu安装c++编译器
打开终端输入sudo apt-get install build-essential 安装gcc和一些库函数.提供C/C++的编译环境 注意编译c++程序要用g++