1 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 2 【功能】根据条件返回相应值 3 【参数】c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 4 注:值1……n 不能为条件表达式,这种情况只能用case when then end解决 5 6 ·含义解释: 7 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 8 该函数的含义如下: 9 IF 条件=值1 THEN 10 RETURN(翻译值1) 11 ELSIF 条件=值2 THEN 12 RETURN(翻译值2) 13 ...... 14 ELSIF 条件=值n THEN 15 RETURN(翻译值n) 16 ELSE 17 RETURN(缺省值) 18 END IF 19 20 或: 21 when case 条件=值1 THEN 22 RETURN(翻译值1) 23 ElseCase 条件=值2 THEN 24 RETURN(翻译值2) 25 ...... 26 ElseCase 条件=值n THEN 27 RETURN(翻译值n) 28 ELSE 29 RETURN(缺省值) 30 END 31 32 33 【示例】 34 ·使用方法: 35 1、比较大小 36 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值 37 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 38 例如: 39 变量1=10,变量2=20 40 则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。 41 42 2、表、视图结构转化 43 现有一个商品销售表sale,表结构为: 44 month char(6) --月份 45 sell number(10,2) --月销售金额 46 现有数据为: 47 200001 1000 48 200002 1100 49 200003 1200 50 200004 1300 51 200005 1400 52 200006 1500 53 200007 1600 54 200101 1100 55 200202 1200 56 200301 1300 57 58 想要转化为以下结构的数据: 59 year char(4) --年份 60 month1 number(10,2) --1月销售金额 61 month2 number(10,2) --2月销售金额 62 month3 number(10,2) --3月销售金额 63 month4 number(10,2) --4月销售金额 64 month5 number(10,2) --5月销售金额 65 month6 number(10,2) --6月销售金额 66 month7 number(10,2) --7月销售金额 67 month8 number(10,2) --8月销售金额 68 month9 number(10,2) --9月销售金额 69 month10 number(10,2) --10月销售金额 70 month11 number(10,2) --11月销售金额 71 month12 number(10,2) --12月销售金额 72 73 结构转化的SQL语句为: 74 75 create or replace view 76 v_sale(year,month1,month2,month3,month4,month5,month6, 77 month7,month8,month9,month10,month11,month12) 78 as 79 select 80 substrb(month,1,4), 81 sum(decode(substrb(month,5,2),'01',sell,0)), 82 sum(decode(substrb(month,5,2),'02',sell,0)), 83 sum(decode(substrb(month,5,2),'03',sell,0)), 84 sum(decode(substrb(month,5,2),'04',sell,0)), 85 sum(decode(substrb(month,5,2),'05',sell,0)), 86 sum(decode(substrb(month,5,2),'06',sell,0)), 87 sum(decode(substrb(month,5,2),'07',sell,0)), 88 sum(decode(substrb(month,5,2),'08',sell,0)), 89 sum(decode(substrb(month,5,2),'09',sell,0)), 90 sum(decode(substrb(month,5,2),'10',sell,0)), 91 sum(decode(substrb(month,5,2),'11',sell,0)), 92 sum(decode(substrb(month,5,2),'12',sell,0)) 93 from sale 94 group by substrb(month,1,4); 95