表table中有字段f1,f2, classid,groupdel
现在的需求是
根据字段classid两个不同的值(例如a和b),按字段groupdel进行分组求和,把f1求和,f2求和,
然后再相加,按字段groupdel进行分组现在写的语句如下:(希望有更好的算法)
 select (sum(t1.f1) + sum(t2.f2)) salary ,t1.groupdel from 
  (select sum(nvl(f1, 0)) f1  ,groupdel
   from wa_data a left join bd_psndoc b on a.psnid=b.pk_psndoc where  
   a.classid='a' group by groupdel ) t1
  inner join 
    (select sum(nvl(f2, 0)) f2, groupdel
    from wa_data a left join bd_psndoc b on a.psnid=b.pk_psndoc where 
   a.classid='b' group by groupdel) t2
   on t1.groupdel = t2.groupdel
   group by t1.groupdel
order by t1.groupdel

解决方案 »

  1.   

    sum(nvl(f1, 0))直接sum(f1)
    (sum(t1.f1) + sum(t2.f2))直接sum(f1+f2)
    你这是两个表吧。wa_data,bd_psndoc
    那个inner也可以修改。没明白具体什么意思。直接
     select sum(a+b) from .. group by classid,groupdel
      

  2.   

    回复linzhangs 有一个条件,就是
    字段classid两个不同的值(例如a和b),
      

  3.   

    现在应该可以了
    select (t1.f1 + t2.f2) salary,
           t1.groupdel
      from (select sum(nvl(f1, 0)) f1, groupdel
              from wa_data a
              left join bd_psndoc b on a.psnid = b.pk_psndoc
             where  a.classid = 'a'
               and groupdel is not null
             group by groupdel) t1
     inner join (select sum(nvl(f2, 0)) f2, groupdel
                   from wa_data a
                   left join bd_psndoc b on a.psnid = b.pk_psndoc
                  where a.classid = 'b'
                    and groupdel is not null
                  group by groupdel) t2 on t1.groupdel = t2.groupdel
     order by t1.groupdel 
      

  4.   

    你直接where a.classid in(‘a’, 'b' )and 
    再分组统计就是了。那个nvl()不需要用的。直接sum.