Tenho uma tabelas órgãos que necessito apresentar uma hierarquia.
select * from orgaos
| codigo |
codigo_pai |
sigla |
| 3 |
2 |
SAGI |
| 1 |
null |
PR |
| 4 |
3 |
DGI |
| 5 |
3 |
DFD |
| 6 |
3 |
DM |
| 7 |
3 |
DA |
| 2 |
1 |
MDS |
| 12 |
1 |
MTE |
| 13 |
1 |
MRE |
| 11 |
3 |
Gab/SAGI |
Para representar este organograma
A consulta abaixo:
with recursive org (sigla, codigo, codigo_pai, path,deep,nome) as (
select sigla, codigo, codigo_pai, array[codigo],1, nome
from orgaos
where codigo_pai is null
union all
select o1.sigla, o1.codigo, o1.codigo_pai, path || o1.codigo ,o2.deep+1, o1.nome
from orgaos o1, org o2
where o2.codigo = o1.codigo_pai
)
select * from org
me gerou
| orgao |
orgao_pai |
sigla |
path |
deep |
| 1 |
|
PR |
{1} |
1 |
| 2 |
1 |
MDS |
{1,2} |
2 |
| 3 |
2 |
SAGI |
{1,2,3} |
3 |
| 4 |
3 |
DGI |
{1,2,3,4} |
4 |
| 5 |
3 |
DFD |
{1,2,3,5} |
4 |
| 6 |
3 |
DM |
{1,2,3,6} |
4 |
| 7 |
3 |
DA |
{1,2,3,7} |
4 |
| 11 |
3 |
Gab/SAGI |
{1,2,3,11} |
4 |
| 12 |
1 |
MTE |
{1,12} |
2 |
| 13 |
1 |
MRE |
{1,13} |
2 |