Maison >base de données >tutoriel mysql >Comment transposer des lignes en colonnes dans SQL Server ?

Comment transposer des lignes en colonnes dans SQL Server ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 02:02:41881parcourir

How to Transpose Rows to Columns in SQL Server?

Transposition de lignes en colonnes dans SQL Server

Lorsque vous travaillez avec des données tabulaires, la transposition de lignes en colonnes peut être une transformation utile. Dans SQL Server, il existe plusieurs approches pour accomplir cette tâche, en fonction des exigences spécifiques.

Agrégation conditionnelle

Une méthode consiste à utiliser l'agrégation conditionnelle. Cette approche convient lorsque le nombre de colonnes est connu à l’avance. En utilisant des instructions CASE imbriquées, vous pouvez spécifier la valeur à récupérer pour chaque colonne en fonction d'une condition spécifique. La requête ci-dessous illustre l'agrégation conditionnelle :

SELECT TimeSeconds,
       COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
       COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
       COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
       COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
  FROM table1
 GROUP BY TimeSeconds

Opérateur PIVOT

Une autre option consiste à utiliser l'opérateur PIVOT. Cet opérateur vous permet de faire pivoter les lignes en colonnes en fonction des valeurs clés. La requête suivante utilise PIVOT pour transposer les lignes :

SELECT TimeSeconds, A1, A2, A3, A4
  FROM
(
  SELECT TimeSeconds, TagID, Value
    FROM table1
) s
PIVOT
(
  MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p

SQL dynamique

Si le nombre de colonnes n'est pas fixe ou est déterminé dynamiquement, vous pouvez tirer parti de la dynamique SQL. Cette approche implique la construction d'une chaîne de requête SQL basée sur les valeurs TagID disponibles et son exécution dynamique. Le code ci-dessous fournit un exemple :

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID)
            FROM Table1
            ORDER BY 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @sql = 'SELECT TimeSeconds, ' + @cols + '
              FROM
            (
              SELECT TimeSeconds, TagID, Value
                FROM table1
            ) s
            PIVOT
            (
              MAX(Value) FOR TagID IN (' + @cols + ')
            ) p'

EXECUTE(@sql)

Ces techniques proposent différentes manières de transposer des lignes en colonnes dans SQL Server. L'approche la plus adaptée dépend de la nature des données et des exigences spécifiques de la tâche.

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