如何解决sql server使用递归cte获取同组级别
我有一个 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
解决方法
您需要做的是从第一个级别开始并添加一个 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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。