Самовложенное соединение SQL - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужен этот результат в этой таблице.Это 3 столбца, и я хочу 3 результата с вложенным узлом.На самом деле я хочу, чтобы каждый узел с собой и родителем, как результат

ID/ Number/SelfRef
21092   100 NULL
21093   50  NULL
21094   30  21093
21095   20  21093
21096   -30 21093
21097   5   21095
21098   15  21095
21099   -5  21095

Мне нужен этот результат

21097    5     21097
21097    5     21095 
21097    5     21093

Это моя логика

this is my logic

1 Ответ

0 голосов
/ 11 декабря 2018

Это сработало для меня

;WITH
    cte1 AS
    (   -- Recursively build the relationship tree
        SELECT      SelfRef
                ,   ID
                ,   AscendentLevel = 1
        FROM        [Kharid].[IdentityGharardadKalaTedad]
        UNION ALL
        SELECT      t.SelfRef
                ,   cte1.ID
                ,   AscendentLevel = cte1.AscendentLevel + 1
        FROM        cte1
        INNER JOIN  [Kharid].[IdentityGharardadKalaTedad]    t   ON t.ID = cte1.SelfRef
    ),
    cte2 AS
    (   -- Now find the ultimate parent
        SELECT      SelfRef
                ,   ID
                ,   rn = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY AscendentLevel DESC)
        FROM        cte1
    )

SELECT  *
FROM    cte2
Order by id
...