Maison >base de données >tutoriel mysql >Comment transposer des lignes en colonnes dans 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!