Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jrprince

Script para Arvore Genealógica _ SQL

Recommended Posts

Amigos,

 

Estou com um problema para fazer uma arvore genealógica e gostaria de saber se algum pode me ajudar.

 

No banco, cada pessoa tem um registro ID e o Registro do UP_ID (Que é o Pai desse registro). Eu preciso fazer uma busca através de WHARE ID = XX e ele me responder a arvore de até 10 níveis.

 

Exemplo:

 

Exemplo de resultado onde colocar WHERE ID = XX

 

Linha 1: linha onde existe o "ID = XX"

Linha 2: linha que possui o UP_ID sendo o ID do resultado da "linha 1"

Linha 3: linha que possui o UP_ID sendo o ID do resultado da "linha 2"

Linha 4: linha que possui o UP_ID sendo o ID do resultado da "linha 3"

Linha 5: linha que possui o UP_ID sendo o ID do resultado da "linha 4"

Linha 6: linha que possui o UP_ID sendo o ID do resultado da "linha 5"

Linha 7: linha que possui o UP_ID sendo o ID do resultado da "linha 6"

Linha 8: linha que possui o UP_ID sendo o ID do resultado da "linha 7"

Linha 9: linha que possui o UP_ID sendo o ID do resultado da "linha 8"

Linha 10: linha que possui o UP_ID sendo o ID do resultado da "linha 9"

 

Isso é possível fazer em um único Select? Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala JPrince! tranquilo?

 

Tentou CTE, recursividade? fiz um exemplo maroto, dê uma olhada ai!

 

use tempdb
go
set nocount on
go
if object_id('tempdb..#temp') is not null
drop table #temp
go
create table #temp (id int identity, id_filho int, id_pai int, nome varchar(100))
go
insert into #temp values (1,2,'Diemerson')
insert into #temp values (1,4,'r2d2')
insert into #temp values (1,5,'c3po')
insert into #temp values (2,3,'Pai do diemerson')
insert into #temp values (4,7,'yoda')
insert into #temp values (5,6,'bb8')
insert into #temp values (3,10,'Avô do diemerson')
insert into #temp values (7,8,'chewie')
insert into #temp values (6,9,'vader')
insert into #temp values (10,12,'Bisavô do diemerson')
insert into #temp values (8,13,'luke')
insert into #temp values (9,11,'stormtrooper')
insert into #temp values (12,14,'Tataravô do diemerson')
insert into #temp values (13,15,'clone')
insert into #temp values (11,16,'obi-wan')
go
with cte (id_filho, id_pai, Nome)
as
(
select id_filho,id_pai, Nome
from #temp where id = 1 -- Id que quero buscar
union all
select
t.id_filho,t.id_pai,t.nome
from #temp t
join cte c on t.id_filho = c.id_pai
)
select * from cte
Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.