decode 怎么用? select decode('ab','a',1, 'ab',2, 0)"decode 1" from dual;decode 1-----------2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DECODE(要判断的字符串,[IF=]第一个条件,[THEN]函数返回值,[IF=]第二个条件,[THEN]函数返回值,……[ELSE]未符合前面条件返回值) 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、正数还是负数,分别返回0、1、-1例如:变量1=10,变量2=20则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。2、表、视图结构转化现有一个商品销售表sale,表结构为:month char(6) --月份sell number(10,2) --月销售金额现有数据为:200001 1000200002 1100200003 1200200004 1300200005 1400200006 1500200007 1600200101 1100200202 1200200301 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 viewv_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); 简单地说就是if... then 语句 To shipatrioc(风吹雨打哗啦啦) :如果sign()中有一个值为空,那么返回的是几呢? 数与空进行运算结果为空。sign的结果也为空:SQL> select sign(100-NULL) from dual;SIGN(100-NULL)--------------SQL>为了避免这种情况,你可以这样处理sign(nvl(变量1,0)-nvl(变量2,0)) 建议用case when else end,它可以对表达式进行判断。 To shipatrioc(风吹雨打哗啦啦) :两个日期相减怎么避免出现NULL的情况呢?~ 刚建的用户以sysdba登录,可结果用户却为sys,为何? 大家帮忙看看查询问题!急!!! oracle job 无法停止 Oracle 插入数据时报错 求个查询语句 [color=#FF0000]【时间问题】在线急等,请大神指教![/color] 以下这段java在SQL PLUS WorkSheet中变异为什么会有这种错误?在线等。 急,数据导入导出问题,问题解决了分数我在加500 大散分。。。漫谈数据库的中庸思想 一条查询语句能搞定否? 关于oracle如何在不同网段上连接 关于Word文档存在Blob大对象的问题?
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、正数还是负数,分别返回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);
SQL> select sign(100-NULL) from dual;SIGN(100-NULL)
--------------
SQL>
为了避免这种情况,你可以这样处理
sign(nvl(变量1,0)-nvl(变量2,0))