【问题标题】:sql server using recrusive cte to get the level in the same groupsql server使用递归cte获取同组中的级别
【发布时间】:2021-03-26 15:34:31
【问题描述】:

我有一个 sql server 表显示 ID 和它们以前的 ID,

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

【问题讨论】:

    标签: sql-server recursive-cte


    【解决方案1】:

    您需要做的是从第一级开始,并在其中添加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;
    

    【讨论】:

    • 非常有用。谢谢@Charlieface。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2012-04-23
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多