none
Select com select recursivo. RRS feed

  • Pergunta

  • Olá pessoal, 

    Eu preciso de uma ajuda, 

    Eu estava fazendo um select para buscar registros de uma tabela.
    Esta tabela possui um relacionamento hierárquico, ou seja tenho IdPai e IdFilho.

    Então eu fiz desta forma:

    Select COUNT(*)
    FROM Chamado
    where YEAR(DataAbertura) = 2012 AND MONTH(DataAbertura) = 1
    and IdCategoria in (Select Id From Categoria Where IdPai = 171)

    O problema,  é que o meu select está pegando apenas o filho da categoria 171 e não todos os filhos.

    Desta forma eu consegui criar um select recursivo que pega todas as categorias filhas pela categoria informada:

    WITH ConsultaRecursiva AS (

    SELECT Id FROM Categoria AS Pai
    WHERE IdPai = 171
    UNION ALL
    SELECT C.Id FROM Categoria AS C
    INNER JOIN ConsultaRecursiva AS CR ON CR.Id = C.IdPai)
    SELECT * FROM ConsultaRecursiva

    O meu problema é que eu preciso substituir este select recursivo dentro do meu select que está na Query, mas ao fazer isto ele não reconhece o WITH.

    Eu tentei também criar uma procedure e colocar la dentro, mas ele não aceita procedure dentro do select.

    Basicamente, eu preciso fazer um select de todos os registros de categorias filhas.

    quarta-feira, 20 de junho de 2012 21:08

Respostas

  • Boa noite,

    Experimente desta forma:

    WITH ConsultaRecursiva AS (
    
    SELECT Id FROM Categoria AS Pai
    WHERE IdPai = 171
    UNION ALL
    SELECT C.Id FROM Categoria AS C
    INNER JOIN ConsultaRecursiva AS CR ON CR.Id = C.IdPai)
    
    Select COUNT(*)
    FROM Chamado
    where YEAR(DataAbertura) = 2012 AND MONTH(DataAbertura) = 1
    and IdCategoria in (Select Id From ConsultaRecursiva)
    

    Espero que seja útil.


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

    • Marcado como Resposta Rodrigo Epic quinta-feira, 21 de junho de 2012 13:18
    quinta-feira, 21 de junho de 2012 00:57

Todas as Respostas