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
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
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
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)
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!