Dynamischer Pivot und dynamischer Wert von Oracle SQL
Eine häufige Herausforderung bei der Verwendung von Pivot-Tabellen in Oracle SQL ist die Erstellung von Pivot-Tabellen mit dynamischen Werten. Der traditionelle Ansatz besteht darin, der in der Pivot-Tabelle-IN-Anweisung verwendeten statischen Zeichenfolge manuell neue Werte hinzuzufügen, was ineffizient ist.
Einschränkungen dynamischer IN-Anweisungen
Das direkte Einbetten dynamischer Anweisungen in PIVOT IN-Anweisungen mithilfe von Unterabfragen, PL/SQL-Variablen oder verschachtelten Abfragen wird nicht unterstützt. Darüber hinaus kann die Verwendung von PIVOT XML zu einer suboptimalen Ausgabe führen.
Lösung: Erstellen Sie eine dynamische IN-Zeichenfolge
Um diese Einschränkungen zu überwinden, kann eine Methode zum Erstellen dynamischer IN-Strings verwendet werden. Hier ist eine Schritt-für-Schritt-Anleitung:
Erstellen Sie eine SELECT-Anweisung zum Generieren dynamischer Zeichenfolgen:
Beispiel: Betrachten Sie die folgende Beispieltabelle:
<code>| myNumber | myValue | myLetter | |---|---|---| | 1 | 2 | A | | 1 | 4 | B | | 2 | 6 | C | | 2 | 8 | A | | 2 | 10 | B | | 3 | 12 | C | | 3 | 14 | A |</code>
Um eine dynamische IN-Zeichenfolge zu generieren, führen Sie die folgende Anweisung aus:
<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter,',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM (SELECT DISTINCT myLetter FROM myTable);</code>
Dynamische Zeichenfolgen in Pivot-Abfragen integrieren:
Beispiel für eine Pivot-Abfrage:
<code class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
Ausgabe:
<code>| MYNUMBER | A_VAL | B_VAL | C_VAL | |---|---|---|---| | 1 | 2 | 4 | NULL | | 2 | 8 | 10 | 6 | | 3 | 14 | NULL | 12 |</code>
Einschränkungen:
Eine Einschränkung dieser Methode besteht darin, dass die maximale Zeichenfolgengröße, die verkettet werden kann, 4000 Byte beträgt.
Das obige ist der detaillierte Inhalt vonWie kann ich Oracle SQL-Tabellen mit dynamischen Werten dynamisch Pivotieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!