1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| create table Hierarchy
(
id int,
parent_id int
)
GO
insert into Hierarchy values (0, null);
insert into Hierarchy values (1, 0);
insert into Hierarchy values (2, 0);
insert into Hierarchy values (3, 1);
insert into Hierarchy values (4, 1);
insert into Hierarchy values (5, 1);
insert into Hierarchy values (6, 2);
insert into Hierarchy values (7, 2);
insert into Hierarchy values (8, 7);
insert into Hierarchy values (9, 5);
GO
with Recursion (id, parent_id, path, Level)
as
(
select -- root node(s)
id,
parent_id,
convert(nvarchar(32), '0') as path,
0
from
Hierarchy h
where
h.parent_id is null
union all
select -- all other nodes
h.id,
h.parent_id,
convert(nvarchar(32), r.path + '>' +
convert(varchar(10), h.id)) as path,
r.Level + 1
from
Hierarchy h
inner join Recursion as r
on h.parent_id = r.id
)
select id, parent_id, path, level from Recursion |
Partager