Maison > base de données > tutoriel mysql > Comment convertir des lignes en colonnes dans SQL Server à l'aide de PIVOT ?

Comment convertir des lignes en colonnes dans SQL Server à l'aide de PIVOT ?

DDD
Libérer: 2025-01-25 12:22:10
original
342 Les gens l'ont consulté

How to Convert Rows to Columns in SQL Server Using PIVOT?

Utilisation de la fonction PIVOT de SQL Server pour restructurer les données

La puissante fonction PIVOT de SQL Server offre un moyen simplifié de transformer les données d'une structure basée sur des lignes en une structure basée sur des colonnes. Ceci est particulièrement utile pour créer des rapports tabulaires plus facilement lisibles et analysés.

Imaginez un tableau avec des numéros de magasin, des numéros de semaine et une valeur (appelons-le xCount). L'objectif est de réorganiser ces données afin que les numéros de magasin soient répertoriés verticalement (lignes) et les numéros de semaines horizontalement (colonnes).

PIVOT statique (numéros de semaine connus) :

Si vous connaissez déjà les numéros de semaine spécifiques dont vous avez besoin, une requête PIVOT simple peut être utilisée :

SELECT *
FROM (
  SELECT store, week, xCount
  FROM yt
) src
PIVOT (SUM(xcount) FOR week IN ([1], [2], [3])) piv;
Copier après la connexion

Cette requête additionne les valeurs xCount pour chaque magasin et chaque semaine. La clause IN précise les semaines ([1], [2], [3] dans cet exemple).

PIVOT dynamique (numéros de semaine inconnus) :

Lorsque les numéros de semaines sont dynamiques (non connus à l'avance), une approche plus flexible s'impose :

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    FROM yt
                    GROUP BY Week
                    ORDER BY Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

SET @query = 'SELECT store,' + @cols + ' FROM (
                SELECT store, week, xCount
                FROM yt
            ) x
            PIVOT (
                SUM(xCount)
                FOR week IN (' + @cols + ')
            ) p '

EXECUTE(@query);
Copier après la connexion

Cette requête dynamique crée d'abord une liste de numéros de semaine uniques, séparés par des virgules, à partir de la table yt. Cette liste est ensuite incorporée dans une requête plus large qui utilise la fonction PIVOT pour créer la sortie souhaitée basée sur les colonnes. Le résultat est un tableau croisé dynamique affichant les magasins sous forme de lignes et les semaines sous forme de colonnes, avec les valeurs xCount correspondantes. Cette méthode s'adapte à n'importe quel nombre de semaines présentes dans les 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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal