根据记录级别获取父级ID-SQL Server

时间:2019-01-26 12:58:06

标签: sql sql-server

我遇到了P6 WBS,需要将日程表导入到SQL Server表中。

P6中WBS的结构如下:

WBS P6 Structure

当我将表导入SQL Server时,我能够使用

识别每个级别
CHARINDEX(LEFT(LTRIM(WBS), 1), WBS) -1 [Level]

结果:

enter image description here

我的挑战是根据记录所在的级别(也基于记录的顺序)检索ParentID,以获得以下结果:

enter image description here

如何根据级别获得ParentID

谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是使用CROSS APPLY

这是假设ID是连续的

这将为该示例产生预期的结果,但是存在注释中提到的风险。

示例

Select A.* 
      ,B.ParentID 
 From YourTable A
 Cross Apply ( Select max(ID) from YourTable Where Level<A.Level and ID<A.ID ) B(ParentID)

返回

enter image description here