根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)


  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 
原文地址:https://www.cnblogs.com/ios9/p/7451049.html