SQL Server: Transformando Linhas em Colunas

Olá,

Ao desenvolver relatórios existem situações em que é necessário transformar registros (linhas) do banco de dados em uma string única.

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):

Recebimento

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

Tags: