我无法在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
我将解释层次结构:
ParentId
为空的任何行,则Hierarchy
将为1 ParentId
不为空并且ParentId
' s ParentId
为空,那么任何行都为2 ParentId
不为空,ParentId
' s ParentId
不为空且下一个ParentId
' s ParentId
是3然后如何为此逻辑编写查询。
答案 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