从层次表SQL中按关系顺序选择所有父级

San*_*mas 5 sql sql-server sql-server-2008

我有一个这样的表,同一个表中有一个父子关系

帐号ID | ParentID | 用户名
----------------------------------------------
1 | 0 | 根
2 | 1 | 儿童1
3 | 1 | 儿童2
4 | 2 | 儿童3
5 | 4 | 儿童1
6 | 5 | 儿童1
7 | 6 | 儿童1
8 | 6 | 儿童1

因此,当我发送帐户ID 7时,我必须按照孩子,父亲,祖父的顺序获取表格。..因此,对于7,我需要获取所有这样的小块

帐户ID
---------
    7
    6
    5
    4
    2
    1个

因此,最重要的一点是顺序。它应该是从最低级别到下一个更高的级别,然后是下一个...

Tim*_*ter 5

您可以使用递归CTE

declare @childAccID int
set @childAccID = 7  

;WITH Rec_CTE 
    AS(
        SELECT 1 AS Level, 
               tChild.*
        FROM dbo.TableName tChild
        WHERE tChild.AccountID = @childAccID

        UNION ALL

        SELECT Level + 1 AS Level, 
               parent.*
        FROM Rec_CTE tParent
        INNER JOIN  dbo.TableName parent 
          ON parent.AccountID = tParent.ParentID
    )
SELECT * FROM Rec_CTE
ORDER BY Level
Run Code Online (Sandbox Code Playgroud)

DEMO