在SQL Server中查找行的层次结构

时间:2017-10-26 23:19:10

标签: sql-server

我无法在SQL Server中找到以下问题的逻辑。

我有一张如下表格。

id    ParentID 
---------------
 1       NULL      
 2       NULL 
 3       1 
 4       2 
 5       3 
 6       5

我需要一个返回行的层次结构的查询,如下所示:

Hierarchy   id    ParentID 
----------------------------
 1           1       NULL     
 1           2       NULL
 2           3       1
 2           4       2
 3           5       3
 4           6       5

我将解释层次结构:

  1. 对于ParentId为空的任何行,则Hierarchy将为1
  2. 如果ParentId不为空并且ParentId' s ParentId为空,那么任何行都为2
  3. 如果ParentId不为空,ParentId' s ParentId不为空且下一个ParentId' s ParentId是3然后
  4. 它继续
  5. 如何为此逻辑编写查询。

1 个答案:

答案 0 :(得分:1)

您可以使用递归查询来实现此目的:

(在下面的示例中,您的初始表数据存储在#a中):

;With DATA AS (
    SELECT   1 as hierarchy
            ,Id 
            ,parentid
    from    #a
    where   parentid is null 

    UNION ALL

    SELECT   Data.Hierarchy + 1
            ,a.id
            ,a.parentid
    FROM    #a a
                INNER JOIN DATA
                    ON      Data.id = a.parentid
)
SELECT  *
FROM    DATA
ORDER BY hierarchy, Id