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

Comment puis-je transposer efficacement des lignes en colonnes dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-05 00:25:42
original
198 Les gens l'ont consulté

How Can I Efficiently Transpose Rows to Columns in SQL Server?

Transposition de lignes en colonnes dans SQL Server

La transposition de lignes en colonnes dans SQL Server est une tâche courante lorsque vous travaillez avec des données stockées sous forme de tableau. Traditionnellement, cela était réalisé à l’aide de curseurs, ce qui peut prendre du temps et être inefficace. Cet article explore des méthodes alternatives de transposition de lignes, offrant des solutions à la fois élégantes et performantes.

Agrégation conditionnelle

Une approche consiste à utiliser l'agrégation conditionnelle, qui exploite la fonction COALESCE() pour gérer les éléments manquants. valeurs.

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

Cette requête génère une sortie avec des valeurs d'espace réservé (« n/a ») pour les valeurs manquantes. data.

PIVOT

Une autre option consiste à utiliser la fonction PIVOT, qui permet la création de colonnes dynamiques.

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

Cette approche génère une sortie avec des valeurs NULL pour les données manquantes. .

SQL dynamique

Si le nombre de colonnes n'est pas fixe et doit être déterminé dynamiquement, du SQL dynamique peut être utilisé.

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

Cette requête construit l'instruction PIVOT dynamique en fonction des valeurs TagID uniques dans la table.

Ces méthodes fournissent des solutions efficaces et personnalisables pour transposer des lignes en colonnes. dans SQL Server. En sélectionnant l'approche appropriée en fonction des caractéristiques des données et des exigences de performances, vous pouvez simplifier les tâches de manipulation des données et améliorer l'efficacité de l'exécution des requêtes.

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