在另一个领域按价值排序

时间:2017-03-14 14:58:37

标签: sql-server

我有一个包含示例数据的作业定义表,如下所示,需要按照具有NextJobDefinitionID>的记录的方式进行排序。 0保持在一起。 NextJobDefinitionID = 0的记录的排序顺序无关紧要。在示例中,JobName为“M1 P1”的记录必须遵循“M1 Pre-Roll”,“M1 Pre-Roll”必须遵循“M1 Recurring Benefits”。我正在使用SQL Server 2014。

数据:

enter image description here

我想要的输出是:

M1 Recurring Benefits
M1 Pre-Roll
M1 P1

2 个答案:

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

(翻译回您原来的专栏/表格/样本数据,作为读者练习,因为正如我所说,我不需要打字练习从图像转录它)