有2张表结构如下: 部门代码表(bmdm): 部门代码        部门名称 
0100            销售科 
0101          销售科一部 
0102          销售科二部 
0200            市场科 
0201          市场科一部 
0203          市场科三部 
销售表(xs): 部门代码        销售金额 
0100            100          
0101            80 
0102            30 
0200            110 
0201            60 
0203            70 
需要实现的结果表:(显示按部门分类汇总和明细数据,如:销售科=本身+销售一部+二部数据) 
  
部门名称            销售金额 
销售科              210 
销售科一部          80 
销售科二部          30  
市场科              240 
市场科一部          60 
市场科三部          70 不用中间表,用sql语句如何实现?

解决方案 »

  1.   

    销售科作为子查询,substr后group by名称后sum;
    销售科一部做外查询,直接group by名称sum即可。
    其他科与部门类似……一个select搞定
      

  2.   

    SQL> select * from bmdm;ACOD ANAME
    ---- --------------------
    0100 销售科
    0101 销售科一部
    0102 销售科二部
    0200 市场科
    0201 市场科一部
    0202 市场科二部已选择6行。SQL> select * from xs;ACOD     AMONEY
    ---- ----------
    0100        100
    0101         80
    0102         30
    0200        110
    0201         60
    0202         70已选择6行。SQL> select a.acode,nvl(b.amoney,a.amoney),c.aname
      2  from xs a
      3  left join
      4  (select substr(acode,1,2) acode,sum(amoney) amoney
      5  from xs
      6  group by substr(acode,1,2) ) b
      7  on a.acode = b.acode||'00'
      8  left join bmdm c
      9  on a.acode=c.acode;ACOD NVL(B.AMONEY,A.AMONEY) ANAME
    ---- ---------------------- --------------------
    0100                    210 销售科
    0101                     80 销售科一部
    0102                     30 销售科二部
    0200                    240 市场科
    0201                     60 市场科一部
    0202                     70 市场科二部已选择6行。