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