Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich Zeilen in Spalten in SQL Server?
Zeilen in Spalten in SQL Server umwandeln
In SQL Server kann das Umsetzen von Zeilen in Spalten durch verschiedene Methoden erreicht werden. Neben der Verwendung von Cursorn zum Lesen von Zeilen und Füllen von Spalten gibt es alternative Ansätze für diese Transformation.
Eine effektive Methode ist die bedingte Aggregation. Durch die Nutzung der Funktion MAX() mit CASE-Anweisungen können Sie bestimmten Spalten basierend auf der Tag-ID Werte zuweisen, wie in der folgenden Abfrage dargestellt:
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
Alternativ können Sie die Abfrage vereinfachen, indem Sie Nullwerte zulassen anstelle von „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
Eine andere Methode beinhaltet den PIVOT-Operator. Es ermöglicht Ihnen, Zeilen basierend auf angegebenen Werten in Spalten zu drehen:
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
In Fällen, in denen Tag-ID-Werte dynamisch sind, kann dynamisches SQL verwendet werden, um die erforderliche Abfrage zu generieren. Durch die Verwendung der Funktionen STUFF() und FOR XML PATH() können Sie die Spaltenliste dynamisch erstellen und in einer PIVOT-Abfrage verwenden:
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)
Diese Methoden bieten effiziente Möglichkeiten, Zeilen in Spalten in SQL zu transponieren Server, der je nach Verfügbarkeit und Art der Tag-ID-Werte verschiedene Szenarien abdeckt.
Das obige ist der detaillierte Inhalt vonWie transponiere ich Zeilen in Spalten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!