Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich Zeilen in Spalten in SQL Server?

Wie transponiere ich Zeilen in Spalten in SQL Server?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-05 07:39:40587Durchsuche

How to Transpose Rows into Columns 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn