Eu tenho uma mesa de funcionários
eu ia | nome | gerente |
---|---|---|
1 | susan | nulo |
2 | John | 1 |
3 | Mary | 1 |
4 | Josh | 3 |
5 | mathew | 4 |
6 | leão | 2 |
7 | Peter | 5 |
Eu quero uma saída como:
eu ia | nome | hierarquia |
---|---|---|
1 | susan | nulo |
2 | John | susan->john |
3 | Mary | susan->mary |
4 | Josh | susan->mary->josh |
5 | mathew | susan->mary->josh->mathew |
6 | leão | susan->john->leo |
7 | Peter | susan->mary->josh->mathew->peter |
DDL:
create table employees(id int,name varchar(10), manager int);
insert into employees
values(1,'susan',null)
,(2,'john',1)
,(3,'mary',1)
,(4,'josh',3)
,(5,'mathew',4)
,(6,'leo',2)
,(7,'peter',5)
Você pode usar um CTE recursivo para isso.
Quando você tem mais de 100 iterações, o que seu exemplo não tem, você precisa fornecer uma opção:
OPTION(MAXRECURSION 0)