oracle中 decode()函数
来源:互联网 发布:java软件开发面试题 编辑:程序博客网 时间:2024/06/11 21:28
decode()函数简介:
主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);
使用方法:
Select decode(columnname,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)
From talbename
Where …
其中columnname为要选择的table中所定义的column,
·含义解释:
decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)的理解如下:
if (条件==值1)
then
return(翻译值1)
elsif (条件==值2)
then
return(翻译值2)
……
elsif (条件==值n)
then
return(翻译值n)
else
return(缺省值)
end if
注:其中缺省值可以是你要选择的column name 本身,也可以是你想定义的其他值,比如Other等;
例子:
-- 创建一个计划表drop table if EXISTS plan;create table plan ( id int PRIMARY key, name varchar(255));-- 创建一个计划明细表,是计划表的子表drop table if EXISTS planDetail;create table planDetail( id int PRIMARY key, name varchar(255), state int, planId int);-- 插入数据insert into plan values(1,'计划一');insert into plan values(2,'计划二');insert into plan values(3,'计划三');insert into planDetail values(1,'明细一',0,1);insert into planDetail values(2,'明细2',1,1);insert into planDetail values(3,'明细3',1,1);insert into planDetail values(4,'明细一',0,2);insert into planDetail values(5,'明细2',0,2);insert into planDetail values(6,'明细3',1,2);insert into planDetail values(7,'明细一',1,3);insert into planDetail values(8,'明细2',1,3);insert into planDetail values(9,'明细3',1,3);
现在要写出一条sql语句,获取每条计划的id,name和该计划的明细state为0的明细数量、state为1的明细数量以及state为0或者1的数量。
如果不使用decode()函数,用left join来写的话:
select t.*,a.sum1,b.sum2,c.sum3 from (select t1.id,t1.name from plan t1LEFT JOIN planDetail t2 on t2.planid = t1.id GROUP BY t1.id,t1.name) tLEFT JOIN (-- state = 0的数量select t1.id,t1.name, count(t2.id) sum1 from plan t1LEFT JOIN planDetail t2 on t2.planid = t1.idwhere t2.state = 0GROUP BY t1.id,t1.name ) a on t.id = a.idLEFT JOIN (-- state = 1的数量select t1.id,t1.name, count(t2.id) sum2 from plan t1LEFT JOIN planDetail t2 on t2.planid = t1.idwhere t2.state = 1GROUP BY t1.id,t1.name ) b on t.id = b.idLEFT JOIN (-- state = 1或 state = 0的数量select t1.id,t1.name, count(t2.id) sum3 from plan t1LEFT JOIN planDetail t2 on t2.planid = t1.idwhere t2.state = 1 or t2.state = 0GROUP BY t1.id,t1.name) c on t.id = c.id
需要分别写一个sql语句来计算state不同状态的明细数量然后全部连接起来。sql语句比较长。
而使用decode()时就比较简单
select t1.id,t1.name, sum(decode(state,0,1,0)) sum1,sum(decode(state,1,1,0)) sum2,sum(decode(state,0,1,1,1,0)) sum3 from plan t1LEFT JOIN planDetail t2 on t2.planid = t1.idwhere t2.state = 1 or t2.state = 0GROUP BY t1.id,t1.name
了
阅读全文
0 0
- Oracle中Decode()函数
- oracle中decode函数
- oracle中decode函数
- Oracle中decode函数
- oracle中 decode()函数
- Oracle中 decode()函数
- Oracle中decode函数用法
- Oracle 中 decode 函数用法
- oracle中decode函数用法
- Oracle中decode函数用法
- Oracle 中 decode 函数用法
- oracle中Decode()函数使用说明
- Oracle 中 decode 函数用法
- Oracle 中 decode 函数用法
- Oracle 中 decode 函数用法
- Oracle 中 decode 函数用法
- Oracle 中 decode 函数用法
- Oracle 中 decode 函数用法
- 字节对齐
- SpringMVC 出现"The request sent by the client was syntactically incorrect ()"解决办法
- python小问题
- 二叉树前序遍历
- 深度学习中的BN层
- oracle中 decode()函数
- 京电的会议室 (环排列 水题)
- chrome各版本下载
- python练习实例14,题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- Redis cluster(八)-part 1
- Python导入新的包的方法
- 批量获取table 下 td 中的 input的值
- linux i2c access in kernel and user space
- luoguP1351 联合权值