Olá,
Ao desenvolver relatórios existem situações em que é necessário transformar registros (linhas) do banco de dados em uma string única (coluna).
Por exemplo, se no OneBoss você gravar um pedido com pagamento em 3 vezes (10, 25 e 40 dias) os dados de pagamento são gravados em uma tabela auxiliar de vendas, descrevendo cada um dos dias e valor a ser pago em cada dia. Estes dados são gravados em linhas (como no modelo abaixo):
O nosso desafio agora é fazer uma listagem que traga duas colunas: o ID do pedido e os dados de recebimento (mencionados acima). Uma forma bem fácil de fazer isto é usar o comando FOR XML conforme o script abaixo:
SELECT
P.IDPedido,
STUFF((SELECT ‘/ ‘ + CONVERT(VARCHAR, R.Dias)
FROM Recebimento R
WHERE R.IDPedido = P.IDPedido
ORDER BY Dias
FOR XML PATH(”)), 1, 1, ”) FormaPagamento
FROM Pedidos P
GROUP BY P.IDPedido
ORDER BY 1
A saída será algo assim:
ID FormaPagamento
1 10/25/40
2 30/60/90
Simples, não?
Sabemos que é só TI, mas adoramos 😉