Usuário com melhor resposta
Consulta em Árvore

Pergunta
-
Fala pessoal, gostaria de uma ajuda, tenho as seguintes tabelas
TABELA1
PAI FILHO COD
1 10 120
1 11 120
1 12 120
10 13 120
10 14 120
13 16 120
...
TABELA2
FILHO CODGRUPO
1 0
10 1
11 2
12 3
13 4
14 5
16 6
...
TABELA 3
CODGRUPO DESCGRUPO
0 Inicio
1 Grupo 1
2 Grupo 2
3 Grupo 3
4 Grupo 4
5 Grupo 5
6 Grupo 6
...
Queria um select que me retorna-se assim de acordo com um código PAI, poe exemplo passando o codigo do PAI 1, ele me retornaria a descrição do grupo (DESCGRUPO) , e todos os codigos filhos e subfilhos, acho que deu pra entender:
DESCGRUPO CODIGO
Inicio 1
Grupo 1 10
Grupo 2 11
Grupo 3 12
Grupo 4 13
Grupo 5 14
Grupo 6 16
Respostas
-
Boa tarde,
Experimente desta forma:
;with CTE_R as ( select distinct gr.descricaogrupo, re.codfilho from @tabela_pai_filho as pf join @tabela_relacao as re on re.codfilho = pf.codpai join @tabela_grupos as gr on gr.CODGRUPO = re.CODGRUPO where pf.codpai = 1 and pf.idempresa = 120 union all select gr.descricaogrupo, re.codfilho from CTE_R as cr join @tabela_pai_filho as pf on pf.codpai = cr.codfilho join @tabela_relacao as re on re.codfilho = pf.codfilho join @tabela_grupos as gr on gr.CODGRUPO = re.CODGRUPO ) select * from CTE_R
Espero que ajude.Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Apollo130 quarta-feira, 19 de dezembro de 2012 12:16
Todas as Respostas
-
Veja se isso resolve teu problema.
create table tpai1 (cod int, filho int, grupo int); create table tfilho1 (cod int); create table tgrupo1 (cod int, descricao varchar(20)); insert into tgrupo1 values(1,'MARCUS'),(2,'VINICIUS'),(3,'BITTENCOURT') insert into tpai1 values(1,1,1),(1,2,2),(2,1,3) insert into tfilho1 values(1),(2),(3) select g.*, p.*, f.* from tgrupo1 g inner join tpai1 p on p.grupo = g.cod inner join tfilho1 f on f.cod = p.filho
Espero que ajude, vlew.
--
Marcus Vinícius Bittencourt
blog: isqlserver.wordpress.com
www.sqlserverRS.com.br -
na verdade acho que não expliquei bem, use as seguintes tabelas abaixo, uso o SQL Server 2005 por isso fiz nessa sintaxe:
DECLARE @tabela_pai_filho TABLE (codpai int, codfilho int, idempresa int) DECLARE @tabela_relacao TABLE (codfilho int, codgrupo int) DECLARE @tabela_grupos TABLE (codgrupo int, descricaogrupo varchar(20)) INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 1,10,120 INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 1,11,120 INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 1,12,120 INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 10,13,120 INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 10,14,120 INSERT @tabela_pai_filho (codpai, codfilho, idempresa) SELECT 13,16,120 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 1,0 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 10,1 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 11,2 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 12,3 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 13,4 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 14,5 INSERT @tabela_relacao (codfilho,codgrupo) SELECT 16,6 INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 0,'Raiz' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 1,'Arroz' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 2,'Feijão' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 3,'Macarrão' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 4,'Tomate' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 5,'Cebola' INSERT @tabela_grupos (codgrupo, descricaogrupo) SELECT 5,'Cheiro Verde'
Só posso pesquisar pela tabela @tabela_pai_filho, com os campos codpai e idempresa.
exemplo: where codpai=1 and idempresa=120.
Atraves dessa consulta ele me traria uma coluna com todos os pais e filhos e filhos de filhos até existir, ou seja, passei o codpai = 1, logo traria 1 e seus filhos (10, 11, 12), dai traria os filhos desses ultimos (13 e 14 filhos do 10) assim suscetivamente (16 filho do 13)
o resultado poderia ser
1
10
11
12
13
14
16
-
Boa tarde,
Experimente desta forma:
;with CTE_R as ( select distinct gr.descricaogrupo, re.codfilho from @tabela_pai_filho as pf join @tabela_relacao as re on re.codfilho = pf.codpai join @tabela_grupos as gr on gr.CODGRUPO = re.CODGRUPO where pf.codpai = 1 and pf.idempresa = 120 union all select gr.descricaogrupo, re.codfilho from CTE_R as cr join @tabela_pai_filho as pf on pf.codpai = cr.codfilho join @tabela_relacao as re on re.codfilho = pf.codfilho join @tabela_grupos as gr on gr.CODGRUPO = re.CODGRUPO ) select * from CTE_R
Espero que ajude.Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Apollo130 quarta-feira, 19 de dezembro de 2012 12:16
-