一个部门表Aid         name         pid
-----------------------------
0000      总公司        0000
000001    一公司        0000
000002    二公司        0000
000003    三公司        0000
000004    四公司        0000
00000101  北京分公司    000001
00000102  上海分公司    000001
00000201  苏州分公司    000002
00000202  杭州分公司    000002
00000301  重庆分公司    000003
.......另一表Bjgid             fs
-------------------------
00000101        300.8
00000102        256.9
00000101        157.2
00000101        235.5
00000102        769.0
00000201        234.3
00000202        169.8
00000301        456.3
......
希望得到的结果(各分公司在表B中的统计和:name          sums
-----------------------------
一公司        693.5
二公司        1025.9
三公司        456.3
四公司        0
.....求教,谢谢

解决方案 »

  1.   


    select 表A.name as name,sum(表B.fs) as sums from 表A,表B where 表A.id=表B.jgid group by 表A.name order by 表A.name
      

  2.   

    2楼的代码统计的是全部部门的数据,我只要统计属于类似一公司\二公司\三公司(也就是id编码为6位)的合计数据,这些数据来自下面的分公司(也就是id为8位编码的公司)
      

  3.   

    SELECT 表A.NAME, 表C.SUMS
      FROM 表A,
           (SELECT SUBSTR(表B.JGID, 1, 6) JGID, SUM(表B.FS) AS SUMS
              FROM 表B
             GROUP BY SUBSTR(表B.JGID, 1, 6)) 表C
     WHERE 表A.ID = 表C.JGID
      

  4.   


    如果楼主的下面分公司编码规则是上级公司的6位编码加后缀组成的,可以采用4楼的方案来解决。该方案实现简单易懂。如果不是这种固定的编码规则,需要能过PID=ID来确定上下级关系就不能使用4楼的方案了,需要通过递归算法来统计树形关系。楼主可以参照我在该贴中的回贴:
    http://topic.csdn.net/u/20110928/00/9c3d7fa4-cb77-44e0-b81d-bcc862cade6c.html
      

  5.   

    SELECT A.NAME.A.SUMFS FROM (SELECT  B.jgid,SUM(fs) sumfs  FROM B
    GROUP BY JGID) T1
    LEFT JOIN  A  ON T1.JGID=A.ID
    UNION ALL
    SELECT  T2.NAME,SUM(T2.FS) sumfs  FROM B
    (
      SELECT B.FS,A2.NAME FROM B
      LEFT JOIN A ON B.JGID=A.PID
      LEFT JOIN A A2 ON A.ID=A2.PID
    ) T2