select id,0 lb0,1 lb1,2 lb2,3 lb3,
sum(decode(lb,0,value,0)) value0,
sum(decode(lb,1,value,0)) value1,
sum(decode(lb,2,value,0)) value2,
sum(decode(lb,3,value,0)) value3
from z6
group by id

解决方案 »

  1.   

    select 001 id,
           0   lb0,
           1   lb1,
           2   lb2, 
           3   lib3,
          (select nvl(sum(value),0) from a where id = 001 and lb = 0) value0,
          (select nvl(sum(value),0) from a where id = 001 and lb = 1) value1,
          (select nvl(sum(value),0) from a where id = 001 and lb = 2) value2,
          (select nvl(sum(value),0) from a where id = 001 and lb = 3) value3
    from dual 
    union
    select 002 id,
           0   lb0,
           1   lb1,
           2   lb2, 
           3   lib3,
          (select nvl(sum(value),0) from a where id = 002 and lb = 0) value0,
          (select nvl(sum(value),0) from a where id = 002 and lb = 1) value1,
          (select nvl(sum(value),0) from a where id = 002 and lb = 2) value2,
          (select nvl(sum(value),0) from a where id = 002 and lb = 3) value3
    from dual 比较土,见笑了
      

  2.   

    一楼方法最简单,decode()应用确实很好!!
      

  3.   

    decode()主要用在哪方面呢?
      

  4.   

    顺便问问,我如何知道decode这个函数的用法呢?oracle9i中的帮助怎么查找不到,
    用sqlplus>help decode 之后显示信息为“help 不可用”,大家都是通过什么来查找oracle中的函数帮助的呢?postscript:sql server 在帮助上做的很好,非常方便。
      

  5.   

    DECODE 中的if-then-else逻辑在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:DECODE(value, if1, then1,  if2,then2, if3,then3,  . . .  else )Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
    需要注意的是,这里的if、then及else 都可以是函数或计算表达式。
    //**************************************************************************************
    DECODE 的简单例子
    Oracle系统中就有许多数据字典是使用decode 思想设计的,比如记录会话信息的V$SESSION数据字典视图就是这样。我们从《Oracle8i Reference》资料中了解到,当用户登录成功后在V$SESSION中就有该用户的相应记录,但用户所进行的命令操作在该视图中只记录命令的代码(0—没有任何操作,2—Insert…),而不是具体的命令关键字。因此,我们需要了解当前各个用户的名字及他们所进行的操作时,要用下面命令才能得到详细的结果:select sid,serial#,username,
    DECODE(command,
    0,’None’,
    2,’Insert’,
    3,’Select’,
    6,’Update’,
    7,’Delete’,
    8,’Drop’,
    ‘Other’) cmmand
    from  v$session where username is not null;
      

  6.   

    decode 和sql server 中的
    case  expression
    when value1 then result1
    ......
    else other result 
    思想一样,个人观点,大家讨论一下
      

  7.   

    用分析函数:select id,0 as lb0,1 as lb1,2 as lb2,3 as lb3,
    max(decode(lb,0,s,0)) as value0,max(decode(lb,1,s,0)) as value1,
    max(decode(lb,2,s,0)) as value2,max(decode(lb,3,s,0)) as value3 from(
    select id,lb,sum(value) over (partition by id,lb) as s from a) group by id