由叶子节点的值反算上边各级节点的值
小弟现在在做一个程序,由于叶子节点有重量,上级节点的值又是其下级节点值的和,不知如何实现。
例如:
上级节点 下级节点 重量
A B
A C
B D
B E 5
C F 17
D G 10
如何通过叶子节点E、F、G的重量求出上级节点A、B、C、D的重量
[解决办法]
IF OBJECT_ID('test') IS NOT NULL DROP TABLE test go CREATE TABLE test (上级节点 VARCHAR(10), 下级节点 VARCHAR(10), 重量 INT ) GO INSERT INTO test SELECT 'A','B',NULL UNION ALL SELECT 'A','C',NULL UNION ALL SELECT 'B','D',NULL UNION ALL SELECT 'B','E',5 UNION ALL SELECT 'C','F',17 UNION ALL SELECT 'D','G',10 ;WITH cte AS ( --先找出叶子节点 SELECT 上级节点 , 下级节点 , 重量 FROM test WHERE 重量 IS NOT NULL UNION ALL --找出叶子节点的上级节点及上级节点的上级节点,以此类推 SELECT b.上级节点,b.下级节点,a.重量 FROM cte a INNER JOIN test b ON a.上级节点=b.下级节点 ) SELECT 上级节点 节点, SUM(重量) 重量 FROM cte GROUP BY 上级节点 /* 节点 重量 ---------- ----------- A 32 B 15 C 17 D 10 (4 行受影响) */