日期:2014-05-17 浏览次数:20553 次
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 行受影响) */