Heim > Datenbank > MySQL-Tutorial > Wie konvertiere ich Spalten in Zeilen in SQL Server (T-SQL)?

Wie konvertiere ich Spalten in Zeilen in SQL Server (T-SQL)?

Linda Hamilton
Freigeben: 2025-01-21 19:22:10
Original
548 Leute haben es durchsucht

How to Convert Columns to Rows in SQL Server (T-SQL)?

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]
Nach dem Login kopieren

Ziel ist es, die Daten in die folgende Struktur umzuwandeln:

[ID] [EntityId] [IndicatorName] [IndicatorValue]
Nach dem Login kopieren

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>
Nach dem Login kopieren

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;
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

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