Maison >base de données >tutoriel mysql >Comment l'opérateur PIVOT de SQL Server peut-il remodeler les données de plusieurs colonnes dans un format orienté ligne ?

Comment l'opérateur PIVOT de SQL Server peut-il remodeler les données de plusieurs colonnes dans un format orienté ligne ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 18:36:13619parcourir

How can SQL Server's PIVOT operator reshape data from multiple columns into a row-oriented format?

Dévoilement des secrets de PIVOT dans SQL Server

Souvent, nous rencontrons des ensembles de données dans lesquels les données sont structurées d'une manière qui rend leur analyse difficile. et présenté dans un format significatif. Un tel scénario se produit lorsque les données sont organisées en plusieurs colonnes, chacune représentant une valeur différente pour une catégorie spécifique. Pour transformer ces ensembles de données en une table avec des catégories comme colonnes et des valeurs comme lignes, nous pouvons utiliser l'opérateur PIVOT dans SQL Server.

Considérons un scénario dans lequel nous avons une table nommée "mytable" avec les colonnes "Name1" , "Nom2" et "Valeur". Les données de ce tableau représentent différentes valeurs ("P1", "P2", "P3", "P4") associées à différents noms ("A" et "B") :

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

Notre objectif consiste à restructurer ces données au format suivant :

       A     B
P1     1     4
P2     1     1
P3     2     NULL
P4     NULL  1

Dans SQL Server 2005, nous pouvons tirer parti de la construction de requêtes dynamiques pour accomplir cette transformation à l'aide de PIVOT. Voici un guide étape par étape :

  1. Assemblez une chaîne de noms de colonnes séparés par des virgules : Exécutez la requête suivante pour créer une chaîne contenant tous les "Name1" distincts. " valeurs séparées par des virgules :

    DECLARE @cols VARCHAR(1000)
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                         FROM myTable FOR XML PATH('') ), 1, 1, '') 
  2. Construire le Dynamic SQL Requête : Créez une variable nommée @sqlquery et attribuez-lui le modèle de requête suivant :

    DECLARE @sqlquery VARCHAR(2000)
    SET @sqlquery = 'SELECT * FROM
       (SELECT Name2, Name1, Value
        FROM myTable ) base
        PIVOT (Sum(Value) FOR [Name1]
        IN (' + @cols + ')) AS finalpivot'
  3. Exécutez la requête dynamique : Exécutez la variable @sqlquery à l'aide de EXECEUTE ( @sqlquery) pour générer le tableau croisé dynamique.

Cette approche construit dynamiquement la clause PIVOT basée sur les valeurs distinctes de la colonne "Nom1". La fonction PIVOT additionne la colonne "Valeur" pour chaque catégorie "Nom1", et le résultat est un tableau dans lequel les valeurs "Nom2" servent d'en-têtes de ligne et les catégories "Nom1" forment les en-têtes de colonnes.

En règle générale En règle générale, PIVOT peut être utilisé chaque fois que vous avez besoin de transformer des données d'une structure orientée colonnes en une structure orientée lignes. Cette technique peut simplifier considérablement les tâches d'analyse et de présentation des données.

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