Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos,
Deixa eu ver se consigo explicar de forma bem simples, tenho uma Tabela CLIENTES e outra CLIENTES_CONTATO, onde é 1 para n.
Eu preciso fazer um SELECT onde eu consiga trazer os clientes (sem duplicar) e os contatos (todos) para dentro de uma única coluna, exemplo:
**CLIENTES**
id Nome
1 WELLINGTON
2 MARCELO
3 SILVA
**CLIENTES_CONTATO**
id id_cliente Nome
1 1 MARCIA
2 1 JANAINA
3 1 FLAVIA
4 2 ROBERTA
5 2 MARIA
6 3 REGINA
O resultado que preciso:
id_cliente Nome_Cliente Contatos
1 WELLINGTON MARCIA, JANAINA, FLAVIA
2 MARCELO ROBERTA, MARIA
3 SILVA REGINA
Quando faço meu SELECT utilizando o JOIN ele duplica os clientes, colocando um contato em cada nova linha.
Tem como fazer isso que preciso?Creio que com STRING_AGG você consiga , no Oracle se usa o LISTAGG.
Agradeço aos dois pela atenção!
A.Jr, eu tentei fazer com PIVOT, mas não consegui chegar a um resultado que eu precisava, sempre usei o PIVOT em uma tabela apenas, não soube usar para duas tabelas;
Motta, eu pesquisei sobre STRING_ADD e as informações que tive foi que só está disponível na versão mais recente do SQL SERVER, eu uso a 2014.
Mas usando as dicas dos dois fui atrás e achei o XML PATH, dai consegui resolver
SELECT DISTINCT C.id_cliente,C.nome_cliente,
STUFF(( SELECT ','+ RTRIM(nome_contato) FROM contatos N
WHERE C.id_cliente = N.id_cliente FOR XML PATH('')),1 ,1, '') nomes_contato
FROM Clientes AS C
Muito obrigado!
Tem,,, procure aqui msm no forum sobre PIVOT