Mehrere Methoden zum Konvertieren von Spalten in Zeilen in SQL Server
In diesem Artikel wird beschrieben, wie Sie Spaltendaten in einer SQL Server-Tabelle in Zeilendaten konvertieren. Angenommen, Ihre Tabellenstruktur sieht wie folgt aus:
[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
Ziel ist es, die Daten in die folgende Struktur umzuwandeln:
[ID] [EntityId] [IndicatorName] [IndicatorValue]
Beispiel für Zielergebnisse:
<code>1 1 'Indicator1' 'Indicator 1 的值' 2 1 'Indicator2' 'Indicator 2 的值' 3 1 'Indicator3' 'Indicator 3 的值' 4 2 'Indicator1' 'Indicator 1 的值'</code>
Lösung:
Die folgenden Methoden können eine Konvertierung von Spalte in Zeile erreichen:
1. Verwenden Sie die UNPIVOT-Funktion
Die UNPIVOT-Funktion wandelt Spalten effizient in Zeilen um:
SELECT id, entityId, indicatorname, indicatorvalue FROM yourtable UNPIVOT ( indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3) ) unpiv;
Bitte stellen Sie sicher, dass die Datentypen der an der Konvertierung beteiligten Spalten konsistent sind.
2. Verwenden Sie CROSS APPLY und UNION ALL
Eine andere Möglichkeit ist die Verwendung von CROSS APPLY und UNION ALL:
SELECT id, entityid, indicatorname, indicatorvalue FROM yourtable CROSS APPLY ( SELECT 'Indicator1', Indicator1 UNION ALL SELECT 'Indicator2', Indicator2 UNION ALL SELECT 'Indicator3', Indicator3 UNION ALL SELECT 'Indicator4', Indicator4 ) c (indicatorname, indicatorvalue);
3. Verwenden Sie CROSS APPLY und VALUES (gilt für neuere Versionen von SQL Server)
In neueren SQL Server-Versionen können Sie die Klauseln CROSS APPLY und VALUES verwenden:
SELECT id, entityid, indicatorname, indicatorvalue FROM yourtable CROSS APPLY ( VALUES ('Indicator1', Indicator1), ('Indicator2', Indicator2), ('Indicator3', Indicator3), ('Indicator4', Indicator4) ) c (indicatorname, indicatorvalue);
4. Verwenden Sie dynamisches SQL (geeignet für eine große Anzahl von Indikatorspalten)
Für große Tabellen mit einer großen Anzahl von Indikatorspalten können Sie dynamisches SQL verwenden, um automatisch Abfragen zu generieren:
DECLARE @colsUnpivot AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SELECT @colsUnpivot = STUFF((SELECT ',' + QUOTENAME(C.column_name) FROM information_schema.columns AS C WHERE C.table_name = 'yourtable' AND C.column_name LIKE 'Indicator%' FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''); SET @query = 'SELECT id, entityId, indicatorname, indicatorvalue FROM yourtable UNPIVOT ( indicatorvalue FOR indicatorname IN (' + @colsUnpivot + ') ) u'; EXEC sp_executesql @query;
Welche Methode Sie wählen, hängt von der Größe Ihrer Tabelle und Ihrer SQL Server-Version ab. Für weniger Spalten reichen die ersten drei Methoden aus; für Tabellen mit einer großen Anzahl von Indicator
-Spalten ist die dynamische SQL-Methode effizienter. Denken Sie daran, yourtable
durch Ihren tatsächlichen Tabellennamen zu ersetzen.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich Spalten in Zeilen in SQL Server (T-SQL)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!