PIVOT SQL Server dynamique pour les colonnes dynamiques
Vous disposez d'un ensemble de données avec plusieurs colonnes (« Nom1 » et « Nom2 ») et une valeur colonne (« Valeur »). Vous souhaitez transformer ces données dans un format pivoté où « Nom1 » devient les en-têtes de colonne et les valeurs sont agrégées par « Nom2 ».
Solution avec Dynamic SQL (SQL Server 2005 ou version ultérieure)
Étant donné que SQL Server 2005 autorise le SQL dynamique, vous pouvez résoudre ce problème en assemblant dynamiquement la requête PIVOT. 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 )
Cette requête fonctionnera de manière dynamique, quel que soit le nombre de valeurs 'Name1' uniques dont vous disposez. Il attribue les valeurs « Name1 » collectées à la variable @cols, qui est ensuite utilisée pour construire dynamiquement la clause PIVOT dans la variable @sqlquery. La requête finale est ensuite exécutée, produisant le résultat souhaité.
Ressources supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!