Se você estiver usando o SQL Server 2005 (ou superior), aqui está o código:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Month])
FROM YourTable FOR XML PATH('') ), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT Person, Month, Paid
FROM YourTable ) base
PIVOT (Sum(Paid) FOR [Person]
IN (' + @cols + ')) AS finalpivot'
EXECUTE ( @sqlquery )
Isso funcionará, não importa quantos status diferentes você tenha. Ele monta dinamicamente uma consulta com
PIVOT
. A única maneira de fazer PIVOT com colunas dinâmicas é montando a consulta dinamicamente, o que pode ser feito no SQL Server. Outros exemplos:
- SQL Server PIVOT talvez?
- Como crio um resumo juntando-se a uma única tabela com o SQL Server?