【发布时间】:2021-08-26 19:26:54
【问题描述】:
我有一个树表。而且,我将在这棵树上获得根和顶层。
帮助解决方案,您可以使用任何您想要的东西
declare @disc table (
id int,
parent int,
label varchar(50)
)
insert into @disc
select *
from (
values (1, null, 'q_1'),
(2, 1, 'a_1_1'),
(3, 2, 'a_1_1_1'),
(4, 1, 'a_1_2'),
(5, null, 'q_5'),
(6, 5, 'a_5_1'),
(7, 5, 'a_5_2')
) x (id, parent, label);
1. q_1
2. a_1_1
3. a_1_1_1
4. a_1_2
5. q_5
6. a_5_1
7. a_5_2
而且,我的结果应该是这样的:
1: 1, null, q_1
2: 2, 1, a_1_1
3: 5, null, q_5
4: 6, 5, a_5_1
或
1: 1, null, q_1
2: 5, null, q_5
3: 2, 1, a_1_1
4: 6, 5, a_5_1
我只找到了一种方法,但我相信有更好的解决方案:
with rec as (
select id, parent, label,
row_number() over(order by id) rnk,
1 lvl
from @disc
where parent is null
union all
select d.id, d.parent, d.label,
row_number() over(order by d.id) rnk,
r.lvl + 1
from rec r
join @disc d on r.id = d.parent
)
select *
from rec
where parent is null or (rnk = 1 and lvl = 2)
【问题讨论】:
-
请分享您目前的尝试
标签: sql sql-server tsql recursion tree