Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

John Player

Stuff SQL - Limitar a quantidade de concatenação no resultado da consulta

Recommended Posts

Prezados, boa tarde! Este é o meu primeiro post no fórum e queria tirar uma dúvida, a qual não achei nada similar na net....

Tenho a seguinte procedure:

 

BEGIN
            
    SET NOCOUNT ON;
        
    Select ba.co_base_arquivos as Base_Arquivo,
           sda.dt_evento as Data_Pagamento,
           sda.nu_pv_evento + ' - ' + ag.no_agencia as Agencia,
           sda.co_nis as NIS,
           sda.co_requerimento as Requerimento,
           sda.no_beneficiario as Nome,        
                                            
           'Parcela(s)' = Stuff(
             
             (Select distinct  ',' +  cast(sdb.nu_parcela as varchar) 
                          
             from [dbo].[adetb014_sitag_dados] sdb

             where ISNULL(sdb.co_nis, '') = ISNULL(sda.co_nis, '') 
             and ISNULL(sdb.co_requerimento, '') = ISNULL(sda.co_requerimento, '')
             and ISNULL(sdb.dt_evento, '') = ISNULL(sda.dt_evento, '')
             and ISNULL(sdb.nu_pv_evento, '') = ISNULL(sda.nu_pv_evento, '') 
                                                                         
             FOR XML PATH ('')) 
                          
             , 1,1 , ''),                 
                                                                           
             sum(sda.vr_evento) as Valor,
             pr.co_processo as Codigo_Processo
    
    From [dbo].[adetb006_processo] pr 
    inner join [dbo].[adetb012_elo] elo on
    pr.co_processo = elo.co_processo 
    inner join [dbo].[adetb013_pesquisa_sitag] ps on
    elo.co_elo = ps.co_elo 
    inner join [dbo].[adetb014_sitag_dados] sda on
    ps.co_consulta = sda.co_consulta 
    inner join [dbo].[icotb005_agencia] ag on
    sda.nu_pv_evento = ag.co_agencia 
    inner join [dbo].[icotb002_municipio] mu on
    ag.co_ibge = mu.co_ibge 
    inner join [dbo].[icotb003_uf] uf on
    mu.co_uf = uf.co_uf 
    inner join [dbo].[icotb010_base_arquivos] ba on
    uf.co_base_arquivos = ba.co_base_arquivos 

    where sda.co_canal = 'EF' and sda.co_tipo_cartao = 0 

    group by  ba.co_base_arquivos, 
              sda.dt_evento,    
              sda.nu_pv_evento,
              ag.no_agencia,
              sda.co_nis, 
              sda.co_requerimento,
              sda.no_beneficiario,                                                      
              pr.co_processo
            
    order by sda.co_nis 
    
END

Que me gera o seguinte resultado:

Base_Arquivo    Data_Pagamento    Agencia                             NIS              Requerimento                  Nome                    Parcela(s)    Valor    Codigo_Processo

GO                      2014-02-28      0764 - BACABAL, MA       12345678912   13030466352         JOSE DA SILVA                1,2,5,6    3009.26       142

 

O que eu preciso é que na coluna parcela(s) agrupe até 3 parcelas, no caso 1, 2, 5 em ordem crescente e some o valor apenas desta 3 parcelas

E que a parcela 6 apareça em outro registro com o valor somente da sua parcela, ficando o resultado abaixo:

 

Base_Arquivo    Data_Pagamento    Agencia                             NIS              Requerimento                  Nome                    Parcela(s)    Valor    Codigo_Processo

GO                      2014-02-28      0764 - BACABAL, MA       12345678912   13030466352         JOSE DA SILVA                1,2,5    2009.26       142

GO                      2014-02-28      0764 - BACABAL, MA       12345678912   13030466352         JOSE DA SILVA                    6      1000,00       142

 

Tem como fazer isto?

 

Muito Obrigado a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

As demais subsequentes para os dados iguais das colunas ficam separadas em outras linhas. 

 

Ex: Parcelas 1,2,3 são somadas numa linha. As parcelas 4 e 5, vão pra outra. Se tiver a parcela 6, fica em outra linha 4,5,6, somadas. Se tiver só a parcela 4,ela fica com o valor somente dela na linha. 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.