Usuário com melhor resposta
Concatendo os registros

Pergunta
-
Respostas
-
Boa Tarde,
Essa dúvida é recorrente (uma pesquisa prévia nos fóruns pode lhe indicar a resposta). Antes de propriamente respondê-la eu indicaria a leitura prévia dos seguintes artigos:
Concatenando registros
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!185.entrySQL Server 2005 T-SQL Tips: Concatenando e Agrupando
Seu SQL Server é 2005 ? A quantidade de registros é fixa ou possui um valor máximo ?
http://www.plugmasters.com.br/sys/materias/869/1/SQL-Server-2005-T-SQL-Tips:-Concatenando-e-Agrupando
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Odraude Solrac quinta-feira, 26 de fevereiro de 2009 13:30
Todas as Respostas
-
Boa Tarde,
Essa dúvida é recorrente (uma pesquisa prévia nos fóruns pode lhe indicar a resposta). Antes de propriamente respondê-la eu indicaria a leitura prévia dos seguintes artigos:
Concatenando registros
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!185.entrySQL Server 2005 T-SQL Tips: Concatenando e Agrupando
Seu SQL Server é 2005 ? A quantidade de registros é fixa ou possui um valor máximo ?
http://www.plugmasters.com.br/sys/materias/869/1/SQL-Server-2005-T-SQL-Tips:-Concatenando-e-Agrupando
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Odraude Solrac quinta-feira, 26 de fevereiro de 2009 13:30
-
sql 2000
os registros estão na mesma tabela e não são fixos, não os quero como coluna, quero apenas concatenar um registro com outro e agrupar por cliente.
li os artigos e não consegui visualizar a situação a qual preciso, vi com tabelas relacionadas.
Carlos Lima -
Boa Noite Carlos,
É uma pena que você esteja no 2000, pois, nos demais as possibilidades são maiores. Em todo caso, segue uma solução 2000 based.
1 declare @t table (Cliente INT, NF CHAR(2)) 2 insert into @t values (1, '10') 3 insert into @t values (1, '20') 4 insert into @t values (1, '30') 5 insert into @t values (2, '45') 6 insert into @t values (2, '55') 7 insert into @t values (3, '67') 8 insert into @t values (4, '76') 9 insert into @t values (5, '88') 10 insert into @t values (5, '91') 11 12 select distinct cliente, 13 replace( 14 replace( 15 (select nf from @t as tint where tout.cliente = tint.cliente for xml raw), 16 '<row nf="',''),'"/>','/') 17 from @t as tout
Nos artigos fiz em tabelas separadas, pois, normalmente o processo de normalização irá separá-las (não é comum ter clientes e notas na mesma tabela por exemplo). De qualquer forma, um SELECT pode unir as tabelas separadas e montar uma única "visão".
No artigo do meu blog, demonstro como fazer isso através de um function. É aplicável a sua situação também e inclusive utiliza uma única tabela (Contatos)
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível -
Carlos,
porque você não faz assim...
Select cd_cliente, nf_client( cd_client ) From Tabela where ....
A nf_client é uma função definida pelo usuário onde você facilmente monta o código e retorna a lista do jeito que quizer...
espero ter ajudado!
Henrique
Consultor .Net- Sugerido como Resposta joaofabel sexta-feira, 6 de fevereiro de 2009 19:52
-
Boa Tarde,
A idéia da function é interessante. Foi justamente a solução que propus em:
Concatenando registros
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!185.entry
Embora eu ache que o XML é mais eficiente
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível -
Olá,
Nessa solução 2000 based esta dando o seguinte erro
declare @t table (Cliente INT, NF CHAR(2)) insert into @t values (1, '10') insert into @t values (1, '20') insert into @t values (1, '30') insert into @t values (2, '45') insert into @t values (2, '55') insert into @t values (3, '67') insert into @t values (4, '76') insert into @t values (5, '88') insert into @t values (5, '91') select distinct cliente, replace( replace( (select nf from @t as tint where tout.cliente = tint.cliente for xml raw), '<row nf="',''),'"/>','/') from @t as tout
Msg 170, Level 15, State 1, Line 15
Line 15: Incorrect syntax near 'xml'.
Carlos Lima -
-
-
Olá Carlos,
Não estou com o SQL Server 2000 para testar, mas ao usar um banco 2005 com Compatibility Level 80, o código passou.
Atualmente estou impossibilitado de utilizar um SQL Server 2000 já que estou "um pouco distante".
Se a solução não for suficiente, sugiro dar uma olhada no link do plugmasters postado anteriormente.
Há soluções baseadas em subqueries, cursores, etc.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com/MVP Summit 2009 - Pré Evento em NY - dia 1.2
http://diegonogare.spaces.live.com/blog/cns!C9B677082DFAE43D!2023.entry
Classifique as respostas. O seu feedback é imprescindível -
gustavo,
resolvido o seu tópico em http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!185.entry resolveu meu problema, o jeito foi criar uma função e na consulta chamar passando os parametros.
obrigado mais uma vez pela ajuda.
abs
Carlos Lima