gpt4 book ai didi

t-sql - TSQL 递归 CTE 顺序

转载 作者:行者123 更新时间:2023-12-02 09:24:31 27 4
gpt4 key购买 nike

我无法弄清楚如何使用递归 CTE 来递归地排序结果。这就是我的意思(这是一个简化的数据集):

我有这个作为输入:

declare @sections table (id int, parent int);

insert into @sections values (1, 1);
insert into @sections values (2, 2);
insert into @sections values (3, 2);
insert into @sections values (4, 2);
insert into @sections values (5, 4);
insert into @sections values (6, 1);
insert into @sections values (7, 6);
insert into @sections values (8, 6);
insert into @sections values (9, 6);
insert into @sections values (10, 9);

-- hierarchical view
--1
-- 6
-- 7
-- 8
-- 10
-- 9
--2
-- 3
-- 4
-- 5

我想要这个作为输出编辑:行的顺序是这里的重要部分

--  id  parent  depth
-- 1 1 0
-- 6 1 1
-- 7 6 2
-- 8 6 2
-- 10 8 3
-- 9 6 2
-- 2 2 0

这是我能做的最好的事情:

with section_cte as
(
select id, parent, 0 'depth' from @sections where id = parent
union all
select cte.id, cte.parent, depth + 1
from @sections s join section_cte cte on s.parent = cte.id where s.id <> s.parent
)
select *from section_cte

任何人都可以帮我调整此查询以获得我需要的内容吗?

谢谢!

最佳答案

您错过了需要确定 cte 深度的部分

WITH CTE AS (
SELECT
id
, parent
, 0 AS depth
FROM
@sections
WHERE
id=parent

UNION ALL

SELECT
s.id
, s.parent
, c.depth + 1
FROM
@sections s
JOIN CTE c ON s.parent=c.id AND s.id <> s.parent
)
SELECT *
FROM CTE;

关于t-sql - TSQL 递归 CTE 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com