none
Query somando total de indicados RRS feed

  • Pergunta

  • Olá Pessoal, tenho essa tabela e gostaria de fazer uma consulta trazendo o resultado consolidado de indicações direta e indireta que cada pessoa teve, alguém tem uma dica de como fazer isso? 

    Tabela Cooperados:

    ID------Nome----ID do indicado
    1-------Maria----------0
    2-------Jose-----------1
    3-------Joao-----------1
    4-------Paulo----------2
    5-------Felipe---------3
    6-------Andre---------4
    7-------Silas----------4

    - A Maria indicou 2 pessoas (Jose e Joao) diretamente, o Jose indicou 1 pessoa (Paulo), entao o Paulo é um indicado direto do Jose e indireto da Maria. O Paulo indicou diretamente 2 pessoas (Andre e Silas) que contam para a Maria como indicados indireto. O Joao, indicado direto da Maria, indicou 1 pessoa (Felipe). Se somarmos os indicados direto e indireto da Maria, teremos um total de 6 Pessoas (ver tabela abaixo).

    - O Jose indicou uma pessoa diretamente (Paulo), o Paulo indicou diretamente 2 pessoas (Andre e Silas) que são dois indiretos do Jose. Então o Jose tem um total de 3 pessoas somando as diretas e indiretas.

    Quero trazer o resultado abaixo na consulta:

    Maria--->6
    Jose---->3
    Joao---->1
    Paulo--->2
    Felipe-->0
    Andre--->0


    Obrigado!

    quarta-feira, 29 de agosto de 2018 20:34

Respostas

  • Boa noite,

    Experimente fazer uns testes utilizando uma CTE recursiva conforme o exemplo abaixo:

    with CTE_Rec as
    (
        select 
            ID,
            Nome,
            ID_Indicado,
            ID as ID_Pai
        from Cooperados
            
        union all
        
        select
            c.ID,
            c.Nome,
            c.ID_Indicado,
            r.ID_Pai
        from CTE_Rec as r
        inner join Cooperados as c
            on c.ID_Indicado = r.ID
    )
    
    select
        c.ID,
        c.Nome,
        (select count(1) from CTE_Rec as r
         where 
             r.ID_Pai = c.ID and
             r.ID_Pai <> r.ID) as Qtd
    from Cooperados as c

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Junyor_2009 quarta-feira, 29 de agosto de 2018 23:15
    quarta-feira, 29 de agosto de 2018 21:13

Todas as Respostas

  • Boa noite,

    Experimente fazer uns testes utilizando uma CTE recursiva conforme o exemplo abaixo:

    with CTE_Rec as
    (
        select 
            ID,
            Nome,
            ID_Indicado,
            ID as ID_Pai
        from Cooperados
            
        union all
        
        select
            c.ID,
            c.Nome,
            c.ID_Indicado,
            r.ID_Pai
        from CTE_Rec as r
        inner join Cooperados as c
            on c.ID_Indicado = r.ID
    )
    
    select
        c.ID,
        c.Nome,
        (select count(1) from CTE_Rec as r
         where 
             r.ID_Pai = c.ID and
             r.ID_Pai <> r.ID) as Qtd
    from Cooperados as c

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Junyor_2009 quarta-feira, 29 de agosto de 2018 23:15
    quarta-feira, 29 de agosto de 2018 21:13
  • gapimex, VC É UM GENIO!!!! Muito obrigado! funcionou corretamente!!!!!
    • Editado Junyor_2009 quarta-feira, 29 de agosto de 2018 23:14
    quarta-feira, 29 de agosto de 2018 23:14