decode()函數使用技巧

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
·       
使用方法:
1
、比较大小
select
decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()
函数根据某个值是0、正数还是负数,分别返回01-1

例如:
变量1=10,变量2=20
sign(变量1-变量2)返回-1decode解码结果为变量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 bysubstrb(month,1,4);


DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值
下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值