Maison >base de données >tutoriel mysql >Comment faire pivoter dynamiquement des données dans SQL Server avec des colonnes dynamiques ?

Comment faire pivoter dynamiquement des données dans SQL Server avec des colonnes dynamiques ?

DDD
DDDoriginal
2024-12-31 11:47:10183parcourir

How to Dynamically Pivot Data in SQL Server with Dynamic Columns?

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 :

  • [Données pivots en T-SQL](https://www .mssqltips.com/sqlservertip/1355/pivot-data-in-tsql/)
  • [Comment créer un résumé en rejoignant à une seule table avec SQL Server ?](https://stackoverflow.com/questions/260660/how-do-i-build-a-summary-by-joining-to-a-single-table-with-sql- serveur)
  • [PIVOT dynamique avec dynamique colonnes](https://stackoverflow.com/questions/8248059/pivot-with-dynamic-columns-in-sql-server-2005)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn