Guest --Renata -- Postado Abril 20, 2007 Denunciar Share Postado Abril 20, 2007 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 forSELECT pes_co_matriculaFROM [dbo].[ARH_DET_PLAN_ESTAC]OPEN mat_pessoaFETCH NEXT FROM mat_pessoainto @TESTEwhile @@fetch_status=0begin fetch next from mat_pessoa into @TESTE SET @TESTE2 = @TESTE2 + @TESTEend SELECT @TESTE2 as ResultadoCLOSE mat_pessoadeallocate mat_pessoaSó que não está funcionando. ALGUÉM PODE ME AJUDAR???????? Obrigada Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jothaz Postado Abril 25, 2007 Denunciar Share Postado Abril 25, 2007 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_prodqualquer dúvida é só se manifestar.t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
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
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.