我有一个包含示例数据的作业定义表,如下所示,需要按照具有NextJobDefinitionID>的记录的方式进行排序。 0保持在一起。 NextJobDefinitionID = 0的记录的排序顺序无关紧要。在示例中,JobName为“M1 P1”的记录必须遵循“M1 Pre-Roll”,“M1 Pre-Roll”必须遵循“M1 Recurring Benefits”。我正在使用SQL Server 2014。
数据:
我想要的输出是:
M1 Recurring Benefits
M1 Pre-Roll
M1 P1
答案 0 :(得分:0)
如果我正确理解,你需要这样的东西:
SessionManager.MultipartFormDataEncodingResult
答案 1 :(得分:0)
我相信这会构建所需的顺序:
declare @t table (ID int,NextID int)
insert into @t(ID,NextID) values
(1,0),
(2,5),
(3,6),
(4,2),
(5,0),
(6,4)
;With Parents as (
select ID,ID as ParentID, 0 as Depth, NextID
from @t
where ID not in (select NextID from @t)
union all
select p.NextID,p.ParentID,Depth+1,t.NextID
from Parents p
inner join
@t t
on
p.NextID = t.ID
where p.NextID != 0
)
select * from Parents
order by ParentID,Depth
通过使用可以作为基本情况自由排序的行来构建CTE,然后遵循链中的NextID
值,保留原始ParentID
并增加{{1} }值,然后最后可以有一个简单的Depth
。
(翻译回您原来的专栏/表格/样本数据,作为读者练习,因为正如我所说,我不需要打字练习从图像转录它)