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
DDDoriginal
2025-01-25 12:22:10331parcourir

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 :

<code class="language-sql">SELECT *
FROM (
  SELECT store, week, xCount
  FROM yt
) src
PIVOT (SUM(xcount) FOR week IN ([1], [2], [3])) piv;</code>

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 :

<code class="language-sql">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);</code>

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:
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