Heim > Datenbank > MySQL-Tutorial > Wie kann man mehrere Spalten in SQL Server dynamisch Pivotieren?

Wie kann man mehrere Spalten in SQL Server dynamisch Pivotieren?

Barbara Streisand
Freigeben: 2025-01-02 13:46:43
Original
762 Leute haben es durchsucht

How to Dynamically Pivot Multiple Columns in SQL Server?

Dynamische Pivot-Transformation für mehrere Spalten in SQL Server

Übersicht

Dieser Artikel befasst sich mit der Herausforderung, einen dynamischen Pivot-Vorgang für mehrere Spalten in Microsoft durchzuführen SQL-Server. Das Ziel besteht darin, Daten in ein Pivot-Tabellenformat umzuwandeln, wobei Zeilen unterschiedliche Werte in einer bestimmten Spalte und Spalten Werte aus anderen Spalten darstellen.

Pivotierung der Daten aufheben

Bevor Sie den Pivot-Vorgang ausführen, Die Daten müssen unpivotiert sein. Bei diesem Prozess werden die Daten umgeformt, indem mehrere Spalten in Zeilen umgewandelt werden. In diesem Fall ist die Pivotierung der Spalten „Gesamt“ und „Volumen“ aufgehoben.

SELECT ID, 
    CONCAT(T_YEAR, '_', T_TYPE, '_', COL) AS COL, 
    VALUE
FROM ATM_TRANSACTIONS t
CROSS APPLY
(
    SELECT 'total', TOTAL UNION ALL
    SELECT 'volume', VOLUME
) c (COL, VALUE)
Nach dem Login kopieren

Generieren der dynamischen Pivot-Abfrage

Sobald die Pivotierung der Daten aufgehoben ist, kann die dynamische Pivot-Abfrage erstellt werden. Diese Abfrage erstellt die erforderlichen Spalten für die Pivot-Tabelle dynamisch basierend auf den nicht pivotierten Daten.

DECLARE @cols AS NVARCHAR(MAX),
    @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT ',' + QUOTENAME(CONCAT(T_YEAR, '_', T_TYPE, '_', COL)) 
                    FROM ATM_TRANSACTIONS t
                    CROSS APPLY
                    (
                        SELECT 'total', 1 UNION ALL
                        SELECT 'volume', 2
                    ) c (COL, SO)
                    GROUP BY COL, SO, T_TYPE, T_YEAR
                    ORDER BY T_YEAR, T_TYPE, SO
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT ID,' + @cols + ' 
            FROM 
            (
                SELECT ID, 
                    CONCAT(T_YEAR, ''_''+T_TYPE+''_''+COL) AS COL, 
                    VALUE
                FROM ATM_TRANSACTIONS t
                CROSS APPLY
                (
                    SELECT ''total'', TOTAL UNION ALL
                    SELECT ''volume'', VOLUME
                ) c (COL, VALUE)
            ) x
            PIVOT 
            (
                MAX(VALUE)
                FOR COL IN (' + @cols + ')
            ) p ';
Nach dem Login kopieren

Ausführen der dynamischen Abfrage

Die dynamische Abfrage wird mithilfe der gespeicherten Prozedur sp_executesql ausgeführt. Diese Prozedur nimmt die vom dynamischen SQL-Code generierte Abfrage und führt sie aus.

EXECUTE SP_EXECUTESQL @QUERY;
Nach dem Login kopieren

Ergebnis

Die Ausgabe der dynamischen Pivot-Operation ist eine Pivot-Tabelle mit unterschiedlichen ID-Werten als Zeilen und Spalten Stellt die nicht gepivotierten Gesamt- und Volumenwerte für jede Kombination aus T_YEAR und T_TYPE dar. Das Ergebnis wird wie folgt sein:

ID 2008_A_TOTAL 2008_A_VOLUME 2008_B_TOTAL 2008_B_VOLUME 2008_C_TOTAL 2008_C_VOLUME 2009_A_TOTAL 2009_A_VOLUME 2009_B_TOTAL 2009_B_VOLUME 2009_C_TOTAL 2009_C_VOLUME
DD1 1000 10 2000 20 3000 30 4000 40 5000 50 6000 60
DD2 7000 70 8000 80 9000 90 10000 100 11000 110 12000 120

Das obige ist der detaillierte Inhalt vonWie kann man mehrere Spalten in SQL Server dynamisch Pivotieren?. 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