decode函数
select /*+ parallel(t, 16) */curr_deal,
sum(decode(dr_type,'103',sheet_cnt,0)) sheet103 ,
sum(decode(dr_type,'104',sheet_cnt,0)) sheet104 ,
sum(decode(dr_type,'204',sheet_cnt,0)) sheet204 ,
sum(decode(dr_type,'1102',sheet_cnt,0)) sheet1102 ,
sum(decode(dr_type,'1103',sheet_cnt,0)) sheet1103 ,
sum(decode(dr_type,'1104',sheet_cnt,0)) sheet1104 ,
sum(decode(dr_type,'1122',sheet_cnt,0)) sheet1122 ,
sum(decode(dr_type,'1123',sheet_cnt,0)) sheet1123 ,
sum(decode(dr_type,'1124',sheet_cnt,0)) sheet1124 ,
sum(decode(dr_type,'8001',sheet_cnt,0)) sheet8001 ,
sum(decode(dr_type,'8003',sheet_cnt,0)) sheet8003 ,
sum(decode(dr_type,'8007',sheet_cnt,0)) sheet8007 ,
sum(decode(dr_type,'8011',sheet_cnt,0)) sheet8011 ,
sum(decode(dr_type,'60101',sheet_cnt,0))sheet60101,
sum(decode(dr_type,'90418',sheet_cnt,0))sheet90418,
sum(decode(dr_type,'90421',sheet_cnt,0))sheet90421,
sum(decode(dr_type,'90508',sheet_cnt,0))sheet90508,
sum(decode(dr_type,'90509',sheet_cnt,0))sheet90509,
sum(decode(dr_type,'90512',sheet_cnt,0))sheet90512,
sum(decode(dr_type,'90515',sheet_cnt,0))sheet90515,
sum(decode(dr_type,'90516',sheet_cnt,0))sheet90516,
sum(decode(dr_type,'90522',sheet_cnt,0))sheet90522,
sum(decode(dr_type,'90523',sheet_cnt,0))sheet90523,
sum(decode(dr_type,'90525',sheet_cnt,0))sheet90525,
sum(decode(dr_type,'90604',sheet_cnt,0))sheet90604
from (select curr_deal,dr_type,sheet_cnt,outcome1 from cbbs_rst4.cbbs_rst_balance_sp partition(m_201605) where dr_type<>90512 union all
select curr_deal,dr_type,sheet_cnt,outcome1 from cbbs_rst4.cbbs_rst_balance_ODS3 partition(m_201605) where dr_type=90512) t group by curr_deal order by curr_deal;
含义解释:
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
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
使用方法:
1、比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2、此函数用在SQL语句中,功能介绍如下:
Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配,就返回第i 个对应的value 。如果base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,如果发现一个匹配,则剩下的compare值(如果还有的话)就都不再求值。一个为NULL的base_exp被认为和NULL compare值等价。如果需要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型。
Decode函数在实际开发中非常的有用
结合Lpad函数,如何使主键的值自动加1并在前面补0
select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号 from tetdmis
eg:
select decode(dir,1,0,1) from a1_Interval
dir 的值是1变为0,是0则变为1
比如我要查询某班男生和女生的数量分别是多少?
通常我们这么写:
select count(*) from 表 where 性别 = 男;
select count(*) from 表 where 性别 = 女;
要想显示到一起还要union一下,太麻烦了
用decode呢,只需要一句话
select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表
eg:
select sum(decode(siteno,'LT',1,0)),sum(decode(siteno,'SZ',1,0)) from facd605;
select sum(case siteno when 'LT' then 1 else 0 end),sum(case siteno when 'SZ' then 1 else 0 end) from facd605;
vinson
相关阅读
#include <cstdlib> //含有rand(),st=srand()#include <ctime>#include <iostream>using namespace std;#define random(x) (ra
MONTH函数是一种常用的日期函数它能够返回以序列号表示的日期中的月份。MONTH函数的语法格式为:MONTH(serial number)参数 serial_
查看更多 https://www.yuque.com/docs/share/167e3c8f-86de-433f-9e60-3b356a8ceb27
凸优化 - 3 - Jensen不等式、共轭函数、Fenchel不等式
本总结是是个人为防止遗忘而作,不得转载和商用。前提说明:为了方便查阅,我将整个凸优化的内容分成了很多部分,因为后面的部分用到了
https://blog.csdn.net/ccblogger/article/details/73065044