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

Wie transponiere ich Zeilen in Spalten in SQL Server?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 02:02:41934Durchsuche

How to Transpose Rows to Columns in SQL Server?

Zeilen in Spalten in SQL Server umwandeln

Beim Arbeiten mit Tabellendaten kann das Umsetzen von Zeilen in Spalten eine nützliche Transformation sein. In SQL Server gibt es je nach den spezifischen Anforderungen mehrere Ansätze, um diese Aufgabe zu erfüllen.

Bedingte Aggregation

Eine Methode ist die Verwendung der bedingten Aggregation. Dieser Ansatz eignet sich, wenn die Anzahl der Spalten im Voraus bekannt ist. Durch die Verwendung verschachtelter CASE-Anweisungen können Sie den für jede Spalte abzurufenden Wert basierend auf einer bestimmten Bedingung angeben. Die folgende Abfrage veranschaulicht die bedingte Aggregation:

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

PIVOT-Operator

Eine weitere Option ist die Verwendung des PIVOT-Operators. Mit diesem Operator können Sie Zeilen basierend auf Schlüsselwerten in Spalten drehen. Die folgende Abfrage verwendet PIVOT, um die Zeilen zu transponieren:

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

Dynamic SQL

Wenn die Anzahl der Spalten nicht festgelegt ist oder dynamisch bestimmt wird, können Sie Dynamic nutzen SQL. Bei diesem Ansatz wird eine SQL-Abfragezeichenfolge basierend auf den verfügbaren TagID-Werten erstellt und dynamisch ausgeführt. Der folgende Code stellt ein Beispiel dar:

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 Techniken bieten verschiedene Möglichkeiten, Zeilen in Spalten in SQL Server zu transponieren. Der am besten geeignete Ansatz hängt von der Art der Daten und den spezifischen Anforderungen der Aufgabe ab.

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