In diesem Artikel wird erläutert, wie Sie mithilfe dynamischer SQL-Technologie Tabellendaten in das Pivot-Tabellenformat konvertieren können, wobei der Schwerpunkt auf der Verbesserung der Effizienz und Flexibilität der Datenkonvertierung liegt.
Die folgende Abfrage verwendet die CASE-Anweisung und GROUP BY, um die Daten-Pivotierung zu implementieren:
<code class="language-sql">SELECT bar, MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1", MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2", MAX(CASE WHEN abc."row" = 3 THEN feh ELSE NULL END) AS "val3" FROM ( SELECT bar, feh, row_number() OVER (partition by bar) as row FROM "Foo" ) abc GROUP BY bar </code>
Diese Methode eignet sich zum Pivotieren von Daten, ist jedoch bei der Verarbeitung großer Datenmengen weniger effizient und weniger flexibel.
-Modul von tablefunc
PostgreSQL bereitgestellte crosstab()
-Funktion kann eine effizientere und dynamischere Lösung bieten.
Tablefunc-Modul installieren
Bevor Sie crosstab()
verwenden, müssen Sie sicherstellen, dass das tablefunc
-Modul in der PostgreSQL-Datenbank installiert wurde. Sie müssen den folgenden Befehl nur einmal pro Datenbank ausführen:
<code class="language-sql">CREATE EXTENSION tablefunc;</code>
Kreuztabellen-Implementierung
Die folgenden crosstab
Abfragen können zum Pivotieren verwendet werden:
<code class="language-sql">SELECT * FROM crosstab( 'SELECT bar, 1 AS cat, feh FROM tbl_org ORDER BY bar, feh') AS ct (bar text, val1 int, val2 int, val3 int); -- 可根据需要增加列</code>
Anleitung:
tbl_org
ist die Eingabetabelle. crosstab()
wählt bar
, eine Dummy-Kategorie cat
und feh
aus. Die Spalte cat
dient nur als Platzhalter und wird ignoriert. ORDER BY
-Klausel stellt sicher, dass die Werte in der richtigen Reihenfolge sind. Diese Abfrage gibt Daten im gewünschten Pivot-Tabellenformat zurück.
Um dynamischere Anwendungen zu erreichen, können wir Fensterfunktionen verwenden, um Kategoriespalten zu synthetisieren:
<code class="language-sql">SELECT * FROM crosstab( $$ SELECT bar, val, feh FROM ( SELECT *, 'val' || row_number() OVER (PARTITION BY bar ORDER BY feh) AS val FROM tbl_org ) x ORDER BY 1, 2 $$ , $$VALUES ('val1'), ('val2'), ('val3')$$ -- 可根据需要增加列 ) AS ct (bar text, val1 int, val2 int, val3 int); -- 可根据需要增加列</code>
Diese Abfrage erstellt dynamisch Kategoriespalten basierend auf Werten in der Tabelle.
Alles in allem bietet die crosstab()
-Funktion eine effizientere und flexiblere Lösung für das Pivotieren in SQL, vereinfacht Abfragen und ermöglicht eine flexible Anpassung an die Bedürfnisse.
Das obige ist der detaillierte Inhalt vonWie kann ich Daten in SQL mithilfe dynamischer SQL-Techniken effizient Pivotieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!