Heim > Datenbank > MySQL-Tutorial > Wie kann ich Zeilen in Spalten in SQL Server effizient konvertieren?

Wie kann ich Zeilen in Spalten in SQL Server effizient konvertieren?

Barbara Streisand
Freigeben: 2025-01-25 14:37:09
Original
305 Leute haben es durchsucht

How to Efficiently Convert Rows to Columns in SQL Server?

Effiziente Zeilen-zu-Spalten-Konvertierung in SQL Server

Frage

Das Konvertieren von Zeilen in Spalten in SQL Server kann eine Leistungsherausforderung sein, insbesondere wenn mit großen Datensätzen gearbeitet wird. In diesem Artikel werden verschiedene Methoden zur Optimierung von Zeilen-in-Spalten-Konvertierungen untersucht.

PIVOT-Funktion

Die PIVOT-Funktion ist eine häufige Wahl für diese Aufgabe. Obwohl dies nicht immer die schnellste Methode ist, bietet sie eine unkomplizierte und flexible Möglichkeit, Zeilen zu konvertieren:

<code class="language-sql">SELECT FirstName, Amount, PostalCode, LastName, AccountNumber
FROM (
  SELECT value, columnName
  FROM yourTable
) d
PIVOT (
  MAX(value)
  FOR columnName IN (FirstName, Amount, PostalCode, LastName, AccountNumber)
) piv;</code>
Nach dem Login kopieren

Aggregationsfunktionen und CASE-Ausdrücke

Eine Alternative zu PIVOT ist die Verwendung von Aggregatfunktionen und CASE-Ausdrücken:

<code class="language-sql">SELECT
  MAX(CASE WHEN columnName = 'FirstName' THEN value END) Firstname,
  MAX(CASE WHEN columnName = 'Amount' THEN value END) Amount,
  MAX(CASE WHEN columnName = 'PostalCode' THEN value END) PostalCode,
  MAX(CASE WHEN columnName = 'LastName' THEN value END) LastName,
  MAX(CASE WHEN columnName = 'AccountNumber' THEN value END) AccountNumber
FROM yourTable;</code>
Nach dem Login kopieren

Mehrere Verbindungen

Mehrere Verknüpfungen können in Fällen verwendet werden, in denen PIVOT- oder Aggregatfunktionsmethoden nicht anwendbar sind:

<code class="language-sql">SELECT fn.value AS FirstName,
  a.value AS Amount,
  pc.value AS PostalCode,
  ln.value AS LastName,
  an.value AS AccountNumber
FROM yourTable fn
LEFT JOIN yourTable a
  ON fn.someCol = a.someCol AND a.columnName = 'Amount'
LEFT JOIN yourTable pc
  ON fn.someCol = pc.someCol AND pc.columnName = 'PostalCode'
LEFT JOIN yourTable ln
  ON fn.someCol = ln.someCol AND ln.columnName = 'LastName'
LEFT JOIN yourTable an
  ON fn.someCol = an.someCol AND an.columnName = 'AccountNumber'
WHERE fn.columnName = 'Firstname';</code>
Nach dem Login kopieren

Dynamischer PIVOT

In Situationen, in denen die Anzahl der zu konvertierenden Spalten unbekannt ist, können Sie dynamisches SQL verwenden, um eine PIVOT-Anweisung zu erstellen:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName)
                FROM yourTable
                GROUP BY ColumnName, id
                ORDER BY id
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)')
    ,1,1,'');

SET @query = N'SELECT ' + @cols + N' FROM
         (
            SELECT value, ColumnName
            FROM yourTable
        ) x
        PIVOT
        (
            MAX(value)
            FOR ColumnName IN (' + @cols + N')
        ) p ';

EXEC sp_executesql @query;</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen in Spalten in SQL Server effizient konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage