Jeśli używasz SQL Server 2005 (lub nowszego), oto kod:
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 )
To zadziała bez względu na to, ile masz różnych statusów. Dynamicznie składa zapytanie z PIVOT
. Jedynym sposobem, w jaki możesz wykonać PIVOT z kolumnami dynamicznymi, jest dynamiczne składanie zapytania, co można zrobić w SQL Server.
Inne przykłady:
- Może SQL Server PIVOT?
- Jak zbudować podsumowanie, łącząc się z pojedynczą tabelą za pomocą SQL Server?