Si está utilizando SQL Server 2005 (o superior), aquí está el 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 )
Esto funcionará sin importar cuántos estados diferentes tengas. Ensambla dinámicamente una consulta con PIVOT
. La única forma en que puede hacer PIVOT con columnas dinámicas es ensamblando la consulta dinámicamente, lo que se puede hacer en SQL Server.
Otros ejemplos:
- ¿SQL Server PIVOT quizás?
- ¿Cómo creo un resumen al unirme a una sola tabla con SQL Server?