0

我有一张桌子

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 的父节点,所以我将使用所有相关节点的 num 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
4

1 回答 1

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

SQL 小提琴演示

于 2013-08-06T04:51:28.633 回答