请问1 decode()和nvl2()函数的用法??????
2 decode(:isNullDate,1,:isLargeThan200,-1)这段代码怎么理解??
谢谢 !!!

解决方案 »

  1.   

    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);
      

  2.   

    nvl2(a,b,c)就是a是not null 就是b,如果a是null 就是c
      

  3.   

    那decode(:isNullDate,1,:isLargeThan200,-1)这段代码怎么解析??
      

  4.   

    就是当:isNullDate的值为1时,则返回:isLargeThan200的值,否则就取-1
      

  5.   

    谢谢了,再问一下least()函数是干什么的?
      

  6.   

    select least(11,99,2) from dual;取最小值,里面的参数可是多个
      

  7.   

    SELECT ename, 
    (CASE deptno
      WHEN 10 THEN 'ACCOUNTING'
      WHEN 20 THEN 'RESEARCH'
      WHEN 30 THEN 'SALES'
      WHEN 40 THEN 'OPERATIONS'
      ELSE 'Unassigned'
      END ) as Department
    FROM emp;