Maison >base de données >tutoriel mysql >Comment transposer des données dans SQL Server à l'aide de l'opérateur PIVOT ?

Comment transposer des données dans SQL Server à l'aide de l'opérateur PIVOT ?

DDD
DDDoriginal
2024-12-25 04:58:20398parcourir

How to Transpose Data in SQL Server Using the PIVOT Operator?

Comment transposer des données SQL Server à l'aide de PIVOT

L'opérateur PIVOT dans SQL Server vous permet de convertir des lignes en colonnes, transformant les données d'un forme orientée verticalement vers une forme orientée horizontalement. Cela peut être utile lorsque vous cherchez à résumer des données en fonction de plusieurs attributs.

Exemple de données et résultat souhaité

Considérez l'ensemble de données de départ suivant :

SELECT Name1, Name2, Value FROM mytable

Name1 | Name2 | Value
-------+-------+------
A      | P1     | 1
A      | P2     | 1
A      | P3     | 2
B      | P1     | 3
B      | P2     | 1
B      | P4     | 1

Le résultat souhaité est de faire pivoter les données afin que l'opérateur PIVOT convertisse les valeurs de la colonne Nom1 en en-têtes de colonne et que les valeurs de la colonne Valeur soient résumé par la colonne Nom2.

Transposition de données avec PIVOT dans SQL Server 2005

Pour SQL Server 2005, l'opérateur PIVOT peut être utilisé de la manière suivante :

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 génère dynamiquement une requête PIVOT basée sur les valeurs distinctes de la colonne Nom1, rassembler les en-têtes de colonnes et résumer les données en conséquence. Au final, le résultat est les données transposées dans le format souhaité :

P1      P2      P3      P4
-------+-------+-------+-------
1       1       2       NULL
3       1       NULL    1

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