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