0

我有一个显示 ID 及其以前的 ID 的 sql server 表,

create table test2 ( ID varchar(10) ,
                     Pre_ID varchar(10)
)

insert into test2 values ('e','d')
                          , ('d','c')
                          , ('c','b')
                          , ('b','a')
                          , ('a',null)
                          , ('r','q')
                          , ('q','p')
                          , ('p',null)

表格是这样的: 在此处输入图像描述

结果应该是这样的: 在此处输入图像描述

我已经使用递归 cte 成功获得了级别,但无法为他们获得正确的组。谁能帮忙?谢谢。

这是我的代码:

with cte as (
select id, Pre_ID, level
from #temp2
where Pre_ID is null

union all 

select t2.id, t2.Pre_ID, t2.level
from cte 
inner join #temp2 t2
on t2.Pre_ID=cte.id
)
select * from cte
order by id
4

1 回答 1

2

您需要做的是从第一个级别开始并添加一个ROW_NUMBER,然后递归地加入所有进一步的级别:

with cte as (
    select id, Pre_ID, level, row_number() over (order by ID) as grp
    from #temp2
    where Pre_ID is null

    union all 

    select t2.id, t2.Pre_ID, t2.level, cte.grp
    from cte 
    inner join #temp2 t2
        on t2.Pre_ID=cte.id
)
select * from cte
order by id;
于 2021-03-26T16:09:12.883 回答