例如:
Id ParentId
---- ----------
0 NULL
1 0
2 0
3 1
4 1
5 2
6 2
我希望得到以下格式:
Id ParentId
---- ----------
0 NULL
1 0
3 1
4 1
2 0
5 2
6 2
答案 0 :(得分:0)
没有“简单”的方法可以将这种自联接列表遍历到任何深度并找到其隐式排序顺序。
你可以尝试这样的事情。或者你看看HierarchyID(评论时)。这是为了这种关系......
DECLARE @tbl TABLE(Id INT,ParentId INT);
INSERT INTO @tbl VALUES
(0,NULL)
,(1,0)
,(2,0)
,(3,1)
,(4,1)
,(5,2)
,(6,2);
SELECT TopNode.Id AS TopNode,Child1.Id AS Child1,Child2.Id AS Child2
FROM @tbl AS TopNode
OUTER APPLY(SELECT Id FROM @tbl WHERE ParentId = TopNode.Id ) AS Child1
OUTER APPLY(SELECT Id FROM @tbl WHERE ParentId = Child1.Id ) AS Child2
WHERE TopNode.ParentId IS NULL
这回来了
0 1 3
0 1 4
0 2 5
0 2 6