Puisque vous utilisez SQL Server 2005, voici le code :
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 )
Cela fonctionnera quel que soit le nombre de statuts différents que vous avez. Il assemble dynamiquement une requête avec PIVOT
. La seule façon de faire PIVOT avec des colonnes dynamiques est d'assembler la requête dynamiquement, ce qui peut être fait dans SQL Server.
Autres exemples :
- Pivoter les données dans T-SQL
- Comment créer un résumé en joignant une seule table avec SQL Server ?
- https://stackoverflow.com/q/8248059/570191