none
Duvida com um CTe RRS feed

  • Pergunta

  • Bom dia!

    Estou precisando fazer um código no qual me acumule valores em uma coluna, mas o código não está "parando".

    Segue amostra de dados.:

    O que preciso basicamente é juntar todos os "unieng" em uma so linha quando o valor do "qtdeng" for igual.
    Seguindo exemplo.:

    qtdeng 1 -> FD/KG/UN/LT/CX/PT/PC
    qtdeng 2 -> CJ/FD/CX/
    qtdeng 3 -> CJ/CX/PT/FD
    .
    .
    .


    Estou tentando fazer com um cte mas não estou conseguindo finalizar, isso se cte for o melhor a melhor situação para o caso.

    Segue código que tentei fazer.:

    ;with ctUnidades as
    	(select
    		convert(varchar, UniEng) as UniEng, qtdeng
    	from
    		Teste
    	group by UniEng, qtdeng
    	having min(qtdEng) = (select min(a.qtdeng) from Teste a
    						  where a.UniEng = Teste.UniEng)
    	union all
    	select
    		convert(varchar, ctUnidades.UniEng + '/' + Teste.UniEng) as Unidade, Teste.qtdeng
    	from
    		Teste
    	inner join ctUnidades on Teste.qtdeng = ctUnidades.qtdeng
    	where Teste.UniEng <> ctUnidades.UniEng
    	) 
    
    select
    	qtdeng, unieng
    from
    	ctUnidades 
    option (MAXRECURSION 0)
    go

    Alguma sugestão de como posso resolver esse problema?

    Muito obrigado desde já!

    sexta-feira, 27 de novembro de 2020 11:46

Respostas

  • Segue uma alternativa utilizando XML:

    select 
        t.qtdeng, 
        STUFF( 
            (SELECT '/' + s.uniEng
             FROM Teste as s
             WHERE s.qtdeng = t.qtdeng
             FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
            , 1, 1, '')
    from Teste as t
    group by t.qtdeng

    Espero que ajude


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

    • Marcado como Resposta rafa_060990 sexta-feira, 27 de novembro de 2020 13:06
    sexta-feira, 27 de novembro de 2020 12:59

Todas as Respostas