Olá galera,
Hoje falaremos sobre a concatenação de registros com SQL. Vamos adotar uma tabela chamada compras que possui as colunas codigo, cliente, produto já com dados inseridos.
Abaixo o resultado de uma consulta simples com dados hipotéticos.
codigo |
cliente |
produto |
1 |
João |
Cerveja |
1 |
João |
Carne |
1 |
João |
Queijo |
2 |
Maria |
Sabonete |
2 |
Maria |
Chocolate |
Agora imagine um resultado, sem tantas repetições, como a tabela abaixo.
codigo |
cliente |
produto |
1 |
João |
Cerveja, Carne, Queijo |
2 |
Maria |
Sabonete, Chocolate |
No PostgreSQL 9.1 usaremos a função string_agg que aceita uma expressão e um delimitador.
SELECT codigo, cliente, string_agg(produto, ', ') AS produto FROM compras GROUP BY codigo, cliente
Já no SQL Server 2008, já é um pouco mais trabalhoso. Usaremos a função STUFF que insere uma cadeia de caracteres em outra cadeia de caracteres e o comando FOR XML PATH para gerar documentos XML extraídos a partir de um banco de dados.
SELECT codigo, cliente, STUFF((SELECT ', ' + produto FROM compras AS b WHERE a.codigo = b.codigo FOR XML PATH('')), 1, 1, '') AS produto FROM compras AS a GROUP BY codigo, cliente
Conhece outras formas de fazer?! Tem experiências com outros bancos?! Poste um comentário e compartilhe seu conhecimento.
Grande abraço a todos e até a próxima.