如何在子记录后将第一条记录作为父记录?

时间:2015-10-09 07:09:56

标签: sql-server-2012

例如:

   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

1 个答案:

答案 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