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 ?

Mary-Kate Olsen
Libérer: 2025-01-05 07:39:40
original
618 Les gens l'ont consulté

How to Transpose Rows into Columns in SQL Server?

Transposition de lignes en colonnes dans SQL Server

Dans SQL Server, la transposition de lignes en colonnes peut être réalisée par différentes méthodes. Outre l'utilisation de curseurs pour lire les lignes et remplir les colonnes, il existe des approches alternatives pour cette transformation.

Une méthode efficace est l'agrégation conditionnelle. En tirant parti de la fonction MAX() avec les instructions CASE, vous pouvez attribuer des valeurs à des colonnes spécifiques en fonction de l'ID de balise, comme le montre la requête suivante :

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
Copier après la connexion

Vous pouvez également simplifier la requête en autorisant les valeurs nulles. au lieu de 'n/a' :

SELECT TimeSeconds,
       MAX(CASE WHEN TagID = 'A1' THEN Value END) A1,
       MAX(CASE WHEN TagID = 'A2' THEN Value END) A2,
       MAX(CASE WHEN TagID = 'A3' THEN Value END) A3,
       MAX(CASE WHEN TagID = 'A4' THEN Value END) A4
  FROM table1
 GROUP BY TimeSeconds
Copier après la connexion

Une autre méthode implique l'opérateur PIVOT. Il vous permet de faire pivoter les lignes en colonnes en fonction des valeurs spécifiées :

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
Copier après la connexion

Dans les cas où les valeurs d'ID de balise sont dynamiques, du SQL dynamique peut être utilisé pour générer la requête requise. En utilisant les fonctions STUFF() et FOR XML PATH(), vous pouvez créer la liste de colonnes de manière dynamique et l'utiliser dans une requête PIVOT :

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)
Copier après la connexion

Ces méthodes fournissent des moyens efficaces de transposer des lignes en colonnes dans SQL. Serveur, répondant à différents scénarios en fonction de la disponibilité et de la nature des valeurs d'ID de balise.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal