Get hierarchical structure using SQL Server

后端 未结 4 578
广开言路
广开言路 2021-01-06 09:26

I have a self-referencing table with a primary key, id and a foreign key parent_id.

+------------+--------------+------+-----+-----         


        
4条回答
  •  不知归路
    2021-01-06 09:50

    Use this:

    ;WITH CTE(Id, Name, parent_id, [Level], ord) AS (
        SELECT 
            MySiteMap.Id, 
            CONVERT(nvarchar(255), MySiteMap.Name) AS Name, 
            MySiteMap.parent_id, 
            1,
            CONVERT(nvarchar(255), MySiteMap.Id) AS ord
        FROM MySiteMap
        WHERE MySiteMap.parent_id IS NULL
        UNION ALL
        SELECT 
            MySiteMap.Id, 
            CONVERT(nvarchar(255), REPLICATE(' ', [Level]) + '|' + REPLICATE(' ', [Level]) + MySiteMap.Name) AS Name, 
            MySiteMap.parent_id, 
            CTE.[Level] + 1,
            CONVERT(nvarchar(255),CTE.ord + CONVERT(nvarchar(255), MySiteMap.Id)) AS ord
        FROM MySiteMap
            JOIN CTE ON MySiteMap.parent_id =CTE.Id
        WHERE MySiteMap.parent_id IS NOT NULL
    )
    SELECT Name
    FROM CTE
    ORDER BY ord
    

    For this:

    A
     | B
      |  B1
      |  B2
     | C
      |  C1
      |  C2
     | D
      |  D1
      |  D2
    

提交回复
热议问题