Ir para conteúdo
Fórum Script Brasil
  • 0

Contatenação Da Mesma Coluna


Guest --Renata --

Pergunta

Guest --Renata --

Preciso concatenar todos registros de uma mesma coluna (char) da uma determinada tabela.

Tentei fazer o seguinte:

DECLARE @TESTE AS varchar(10), @TESTE2 AS varchar(1000)

DECLARE mat_pessoa cursor for

SELECT pes_co_matricula

FROM [dbo].[ARH_DET_PLAN_ESTAC]

OPEN mat_pessoa

FETCH NEXT FROM mat_pessoa

into @TESTE

while @@fetch_status=0

begin

fetch next from mat_pessoa

into @TESTE

SET @TESTE2 = @TESTE2 + @TESTE

end

SELECT @TESTE2 as Resultado

CLOSE mat_pessoa

deallocate mat_pessoa

Só que não está funcionando. ALGUÉM PODE ME AJUDAR???????? Obrigada

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Princesa,

Segue um exemplo completo, do nosso amigo eriva_br , de executar o que queres.

set nocount on
    --tabelas para testes
    create table produto (ID_PRODUTO int, NOM_PRODUTO varchar(50))
    insert into produto (ID_PRODUTO, NOM_PRODUTO ) values (1, 'PRODUTO 1')
    insert into produto (ID_PRODUTO, NOM_PRODUTO ) values (2, 'PRODUTO 2')
    insert into produto (ID_PRODUTO, NOM_PRODUTO ) values (3, 'PRODUTO 3')
    
    create table fornecedor(ID_FORNECEDOR int, NOM_FORNECEDOR varchar(50))
    insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (1, 'FORNECEDOR 1')
    insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (2, 'FORNECEDOR 2')
    insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (3, 'FORNECEDOR 3')
    insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (4, 'FORNECEDOR 4')
    
    
    create table forn_prod (ID_PRODUTO int, ID_FORNECEDOR int)
    insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (1, 1)
    insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (2, 1)
    insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (1, 2)
    insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (2, 2)
    insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (1, 4)
    
    
    
    --tabela temporaria
    create table #temp (NOM_PRODUTO varchar(50), NOM_FORNECEDOR varchar(4000))
    
    --select distinct para buscar somente produtos que estejam na tabela forn_prod
    --cursor x: produtos
    declare x cursor for select distinct forn_prod.ID_PRODUTO, NOM_PRODUTO from forn_prod
                inner join produto on produto.ID_PRODUTO = forn_prod.ID_PRODUTO
    --variaveis para o cursor x
    declare @ID_PRODUTO int
    declare @NOM_PRODUTO varchar(50)
    --variável para concatenar o nome dos fornecedores
    declare @NOM_FORNECEDOR_conc varchar(8000)
    open x
    f etch next from x into @ID_PRODUTO,@NOM_PRODUTO
    while @@fetch_Status=0
    begin
        --zerando variável de concatenação
        set @NOM_FORNECEDOR_conc = ''
        --cursor y: fornecedores relacionados com os produtos, vai concatenar os fornecedores na variável @NOM_FORNECEDOR_conc
        declare y cursor for select NOM_FORNECEDOR from fornecedor
                    inner join forn_prod on forn_prod.ID_FORNECEDOR = fornecedor.ID_FORNECEDOR
                    where forn_prod.ID_PRODUTO = @ID_PRODUTO
        --variavel para o cursor y
        declare @NOM_FORNECEDOR varchar(50)
        open y
        f etch next from y into @NOM_FORNECEDOR
        while @@fetch_Status=0
        begin
            --concatenando fornecedores na variável @NOM_FORNECEDOR_conc
            set @NOM_FORNECEDOR_conc = @NOM_FORNECEDOR_conc + @NOM_FORNECEDOR + ', '
    
            --loop do cursor y
            f etch next from y into @NOM_FORNECEDOR
        end
        --fim do cursor y
        close y
        deallocate y  
    
        --retira última virgula
        set @NOM_FORNECEDOR_conc = substring(@NOM_FORNECEDOR_conc, 1, len(@NOM_FORNECEDOR_conc)-1)
        --insere na tabela virtual
        insert into #temp (NOM_PRODUTO, NOM_FORNECEDOR )
        values (@NOM_PRODUTO, @NOM_FORNECEDOR_conc)
    
        --loop do cursor x
        f etch next from x into @ID_PRODUTO,@NOM_PRODUTO
    end
    --fim do cursor x
    close x
    deallocate x
    
    --consulta da tabela temporaria
    select * from #temp
    
    --apagando tabela temporaria
    drop table #temp
    --apagando tabelas para testes
    drop table produto
    drop table fornecedor
    drop table forn_prod

qualquer dúvida é só se manifestar.

t+

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...