Recursive same-table query in SQL Server 2008

后端 未结 4 1567
谎友^
谎友^ 2020-12-01 02:28

I have the following table in a SQL Server 2008 database:

Id  Name       ParentFolder
--  ----       ------------
1   Europe     NULL
2   Asia       NULL
3           


        
4条回答
  •  青春惊慌失措
    2020-12-01 02:51

    Try this one:

        DECLARE @tbl TABLE (
             Id INT
            ,[Name] VARCHAR(20)
            ,ParentId INT
            )
    
        INSERT INTO @tbl( Id, Name, ParentId )
        VALUES
         (1, 'Europe', NULL)
        ,(2, 'Asia',   NULL)
        ,(3, 'Germany', 1)
        ,(4, 'UK',      1)
        ,(5, 'China',   2)
        ,(6, 'India',   2)
        ,(7, 'Scotland', 4)
        ,(8, 'Edinburgh', 7)
        ,(9, 'Leith', 8)
    
        ;
    WITH  abcd
            AS (
                  -- anchor
                SELECT  id, [Name], ParentID,
                        CAST(([Name]) AS VARCHAR(1000)) AS "Path"
                FROM    @tbl
                WHERE   ParentId IS NULL
                UNION ALL
                  --recursive member
                SELECT  t.id, t.[Name], t.ParentID,
                        CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
                FROM    @tbl AS t
                        JOIN abcd AS a
                          ON t.ParentId = a.id
               )
    SELECT * FROM abcd
    

提交回复
热议问题