none
Consulta em Árvore RRS feed

  • 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

    terça-feira, 18 de dezembro de 2012 17:18

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
    terça-feira, 18 de dezembro de 2012 18:24

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

    terça-feira, 18 de dezembro de 2012 17:40
  • 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

    terça-feira, 18 de dezembro de 2012 18:05
  • 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
    terça-feira, 18 de dezembro de 2012 18:24
  • Blz amigo, ajudou bastante,...

    Abçs

    quarta-feira, 19 de dezembro de 2012 12:16