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 |
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 |

Nenhum comentário:
Postar um comentário