Nullif、NVL、NVL2、Decode用法

NULLIF (expr1, expr2)
expr1與expr2相等返回NULL,不等則返回expr1  注意類型要一致

NVL2 (expr1, expr2, expr3)
expr1不為NULL,返回expr2;為NULL,則返回expr3

NVL (expr1 , expr2)
expr1為NULL,則返回expr2. 如果expr1不為NULL,則返回expr1

decode (expression, search_1, result_1, search_2, result_2, ., search_n, result_n, default)

decode函數比較表達式和搜索字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值。


使用方法:
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、表、视图结构转化
现有一个商品销售表sale,表结构为:
month    char(6)      --月份
sell    number(10,2)   --月销售金额

现有数据为:
200001  1000
200002  1100
200003  1200
200004  1300
200005  1400
200006  1500
200007  1600
200101  1100
200202  1200
200301  1300

想要转化为以下结构的数据:
year     char(4)         --年份
month1  number(10,2)   --1月销售金额
month2  number(10,2)   --2月销售金额
month3  number(10,2)   --3月销售金额
month4  number(10,2)   --4月销售金额
month5  number(10,2)   --5月销售金额
month6  number(10,2)   --6月销售金额
month7  number(10,2)   --7月销售金额
month8  number(10,2)   --8月销售金额
month9  number(10,2)   --9月销售金额
month10  number(10,2)   --10月销售金额
month11  number(10,2)   --11月销售金额
month12  number(10,2)   --12月销售金额

结构转化的SQL语句为:

create or replace view v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8

,month9,month10,month11,month12)

as
    
select
    substrb(
month , 1 , 4 ),
    
sum (decode(substrb( month , 5 , 2 ), ' 01 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 02 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 03 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 04 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 05 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 06 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 07 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 08 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 09 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 10 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 11 ' ,sell, 0 )),
    
sum (decode(substrb( month , 5 , 2 ), ' 12 ' ,sell, 0 ))
    
from  sale
    
group   by  substrb( month , 1 , 4 );

 

转载于:https://www.cnblogs.com/brainstormlee/archive/2008/07/23/1249528.html

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值