Se stai utilizzando SQL Server 2005 (o versioni successive), ecco il codice:
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 )
Funzionerà indipendentemente dal numero di stati diversi che hai. Assembla dinamicamente una query con PIVOT
. L'unico modo per eseguire PIVOT con colonne dinamiche è assemblare la query in modo dinamico, operazione che può essere eseguita in SQL Server.
Altri esempi:
- Forse SQL Server PIVOT?
- Come faccio a creare un riepilogo unendomi a una singola tabella con SQL Server?