Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine SQL Server-Tabelle mit unterschiedlichen Kategorien dynamisch drehen?

Wie kann ich eine SQL Server-Tabelle mit unterschiedlichen Kategorien dynamisch drehen?

DDD
Freigeben: 2025-01-25 18:47:11
Original
544 Leute haben es durchsucht

How to Dynamically Pivot a SQL Server Table with Varying Categories?

Verwenden Sie dynamisches SQL, um die Datenperspektive

zu erreichen <:> Frage:

Der Datensatz, der die Spalte Datum, Kategorie und Menge enthält, wird in eine Perspektiventabelle mit dynamischen Kategorien konvertiert. Zum Beispiel die folgenden Daten:

muss konvertiert werden in:

<code>日期        类别        金额
2012年1月1日    ABC             1000.00
2012年2月1日    DEF             500.00
2012年2月1日    GHI             800.00
2012年2月10日   DEF             700.00
2012年3月1日    ABC             1100.00</code>
Nach dem Login kopieren
Lösung:

<code>日期        ABC             DEF             GHI
2012年1月1日    1000.00
2012年2月1日                    500.00        800.00
2012年2月10日                   700.00
2012年3月1日    1100.00</code>
Nach dem Login kopieren
SQL Server bietet dynamische Perspektivenfunktionen, mit denen diese Conversion erreicht werden kann. Das folgende Skript zeigt, wie man erreicht:

Diese Methode verwendet ein dynamisches SQL, um verschiedene Kategorien aus der Tabelle abzurufen. Dann konstruiert es dynamisch Drehklauseln, um alle eindeutigen Kategorien zu berücksichtigen. Sehen Sie dann das Ergebnis entsprechend an, die Daten und Kategoriendaten ausrichten.

<:> Ergebnis:

<code class="language-sql">CREATE TABLE temp (
    date DATETIME,
    category VARCHAR(3),
    amount MONEY
);

INSERT INTO temp VALUES ('2012-01-01', 'ABC', 1000.00);
INSERT INTO temp VALUES ('2012-02-01', 'DEF', 500.00);
INSERT INTO temp VALUES ('2012-02-01', 'GHI', 800.00);
INSERT INTO temp VALUES ('2012-02-10', 'DEF', 700.00);
INSERT INTO temp VALUES ('2012-03-01', 'ABC', 1100.00);


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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT date, ' + @cols + ' FROM 
            (
                SELECT date, amount, category
                FROM temp
           ) x
            PIVOT 
            (
                 MAX(amount)
                FOR category IN (' + @cols + ')
            ) p ';


EXECUTE(@query);

DROP TABLE temp;</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine SQL Server-Tabelle mit unterschiedlichen Kategorien dynamisch drehen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage