問題:我可以修改查詢來顯示導(dǎo)航路徑嗎?

字號:

我在Common Table Expression上看到你的文章,上面有個遞歸的查詢。我如何修改這個查詢,以不同的格式顯示從樹上下到每個返回到結(jié)果集中的節(jié)點的路徑?例如,如果數(shù)據(jù)是:
     ID ParentId
     A null
     B A
     C A
     D B
     E C
    我想要查詢返回的結(jié)果是:
     ID Level Path
     A 1 A
     B 2 A.B
     C 2 A.C
     D 3 A.B.D
     E 3 A.B.C
    專家回答:
    CREATE TABLE #x
    (
     ID CHAR(1),
     ParentID CHAR(1)
    )
    INSERT #x (ID, ParentID)
    SELECT 'A', NULL
    UNION ALL
    SELECT 'B', 'A'
    UNION ALL
    SELECT 'C', 'A'
    UNION ALL
    SELECT 'D', 'B'
    UNION ALL
    SELECT 'E', 'C'
    ;WITH FullPath AS
    (
     SELECT
     ID,
     1 AS Level,
     CONVERT(VARCHAR(MAX), ID) AS Path
     FROM #x
    WHERE ParentID IS NULL
     UNION ALL
     SELECT
     x.ID,
     FP.Level + 1 AS Level,
     FP.Path + '.' + x.ID AS Path
     FROM #x AS x
     JOIN FullPath FP ON x.ParentID = FP.ID
    )
    SELECT *
    FROM FullPath