我有一张桌子
Node | NoteParent | Num
A | Root | 10
B | A | 20
C | A | 30
G | B | 40
D | B | 50
E | G | 70
F | C | 60
我有一个问题,我如何使用CTE来求和节点的数量取决于它与另一个节点的链接。 例如,我有节点B有Num是20,节点B是节点G和节点D的父节点,节点G也是节点E的父节点所以我将使用所有数量的相关节点20(B)+ 40( G)+ 50(D)+ 70(E)= 180
结果将是:
Node | NoteParent | Num | SUM
A | Root | 10 | 280
B | A | 20 | 180
C | A | 30 | 90
G | B | 40 | 110
D | B | 50 | 50
E | G | 70 | 70
F | C | 60 | 60
答案 0 :(得分:5)
像
这样的东西DECLARE @MyTable TABLE
([Node] varchar(1), [NoteParent] varchar(4), [Num] int)
;
INSERT INTO @MyTable
([Node], [NoteParent], [Num])
VALUES
('A', 'Root', 10),
('B', 'A', 20),
('C', 'A', 30),
('G', 'B', 40),
('D', 'B', 50),
('E', 'G', 70),
('F', 'C', 60)
;WITH Vals AS (
SELECT mt.Node TopNode,
mt.NoteParent TopNoteParent,
*
FROM @MyTable mt
UNION ALL
SELECT v.TopNode,
v.TopNoteParent,
m.*
FROM @MyTable m INNER JOIN
Vals v ON v.Node = m.NoteParent
)
SELECT TopNode,
TopNoteParent,
SUM(Num) [SUM]
FROM Vals
GROUP BY TopNode,
TopNoteParent
ORDER BY 1