none
Consulta Recursiva RRS feed

  • Pergunta

  • Olá,

    Preciso fazer uma consulta recursiva para rastreabilidade de passagens de valores.

    Porém, eu preciso que ele exiba os números sucessores e antecessores.

    Exemplo, ao filtrar número 1245, precisa exibir:

    1214,1215,1216,1222,1298

    Exemplo estrutura tabela

    Alguém poderia me ajudar?

    Grato,

    Felipe

    terça-feira, 21 de julho de 2020 13:55

Respostas

  • Bom dia,

    Não sei se entendi errado mas olhando o exemplo que você postou me pareceu que a sequencia foi quebrada entre a segunda e a terceira linha.

    De qualquer forma, experimente fazer uns testes mais ou menos dessa forma:

    with 
        CTE_Ant as
        (
            select Origem as Codigo, -1 as Nivel
            from Tabela
            where Destino = 1245
            
            union all
            
            select t.Origem, a.Nivel - 1
            from CTE_Ant as a
            inner join Tabela as t
                on t.Destino = a.Codigo
        ),
        
        CTE_Suc as
        (
            select Destino as Codigo, 1 as Nivel
            from Tabela
            where Origem = 1245
            
            union all
            
            select t.Destino, s.Nivel + 1
            from CTE_Suc as s
            inner join Tabela as t
                on t.Origem = s.Codigo
        )
        
    select * from CTE_Ant
    
    union all    
    
    select * from CTE_Suc
    
    order by Nivel

    Espero que ajude


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

    • Marcado como Resposta felipe_louzada terça-feira, 21 de julho de 2020 16:55
    terça-feira, 21 de julho de 2020 15:22

Todas as Respostas

  • Bom dia,

    Não sei se entendi errado mas olhando o exemplo que você postou me pareceu que a sequencia foi quebrada entre a segunda e a terceira linha.

    De qualquer forma, experimente fazer uns testes mais ou menos dessa forma:

    with 
        CTE_Ant as
        (
            select Origem as Codigo, -1 as Nivel
            from Tabela
            where Destino = 1245
            
            union all
            
            select t.Origem, a.Nivel - 1
            from CTE_Ant as a
            inner join Tabela as t
                on t.Destino = a.Codigo
        ),
        
        CTE_Suc as
        (
            select Destino as Codigo, 1 as Nivel
            from Tabela
            where Origem = 1245
            
            union all
            
            select t.Destino, s.Nivel + 1
            from CTE_Suc as s
            inner join Tabela as t
                on t.Origem = s.Codigo
        )
        
    select * from CTE_Ant
    
    union all    
    
    select * from CTE_Suc
    
    order by Nivel

    Espero que ajude


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

    • Marcado como Resposta felipe_louzada terça-feira, 21 de julho de 2020 16:55
    terça-feira, 21 de julho de 2020 15:22
  • Perfeito, realmente eu me equivoquei no exemplo, sorte minha que você entendeu mesmo assim.

    Obrigado pela ajuda!

    terça-feira, 21 de julho de 2020 16:56