Protože používáte SQL Server 2005, zde je kód:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Name1])
FROM myTable FOR XML PATH('') ), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT Name2, Name1, Value
FROM myTable ) base
PIVOT (Sum(Value) FOR [Name1]
IN (' + @cols + ')) AS finalpivot'
EXECUTE ( @sqlquery )
To bude fungovat bez ohledu na to, kolik různých stavů máte. Dynamicky sestavuje dotaz pomocí PIVOT
. Jediným způsobem, jak můžete provést PIVOT s dynamickými sloupci, je dynamické sestavení dotazu, což lze provést na serveru SQL Server.
Další příklady:
- Kontingenční data v T-SQL
- Jak vytvořím souhrn připojením k jedné tabulce pomocí serveru SQL?
- https://stackoverflow.com/q/8248059/570191