oracle9i数据库,通过pl/sql操作,现有一表WW,有K,a,b,c,d五个字段,3000到4000左右条记录,欲求甲,乙2个结果,要对所有记录执行如下操作:
如果K=1,
    一:若(a-b)-c>=0,甲=b,乙=c;
    二:若(a-b)-c<0,甲=b,乙=a-b;
如果K=0,
    一:若(a-b)-d>=0,甲=b+d,乙=0;
    二:若(a-b)-d<0,甲=a,乙=0;最后,对甲和乙的结果分别累加,输出甲和乙的结果,具体的SQL语句该怎么写呢??

解决方案 »

  1.   

    SELECT SUM (DECODE (k, 1, b, CASE
                           WHEN (a - b) - d >= 0
                              THEN b + d
                           ELSE a
                        END)) 甲合计,
           SUM (DECODE (k, 0, 0, CASE
                           WHEN (a - b) - c >= 0
                              THEN c
                           ELSE a - v
                        END)) 乙合计
      FROM ww
      

  2.   

    select sum(甲) , sum(乙) 乙
      from (select case
                     when k = 1 then
                      b
                     when (k = 0 and a - b - d > 0) then
                      b + d
                     when (k = 0 and a - b - d < 0) then
                      a
                   end 甲 ,
                   case
                     when k = 0 then
                      0
                     when (k = 1 and a - b - c > 0) then
                      c
                     when (k = 1 and a - b - c < 0) then
                      a - b
                   end 乙
              from ww)
      

  3.   

    如果现在还想求sum(a)的值呢??sum(a)只要直接求就可以了不要加这些判断条件,
    也就是说,输出的结果是sum(甲),sum(乙),sum(a),恳求具体的SQL语句,不胜感激!!
      

  4.   

    SELECT sum(yi),SUM(jia) FROM
    (
    SELECT k,decode(k,1,decode(sign((a-b)-c),-1,a-b,c),
                    0,0) yi FROM ww) a,
    (               
    SELECT k,decode(k,1,b,
                    0,decode(sign((a-b)-d),-1,a,b + d)) jia FROM ww )b 
    WHERE a.k = b.k