Heim >Datenbank >MySQL-Tutorial >Wie führt man dynamische Pivots in Oracle SQL mit unterschiedlichen Werten durch?
Oracle SQL Dynamic Pivot Table: Umgang mit sich ändernden Werten
Der Umgang mit dynamischen Werten in IN
-Anweisungen kann schwierig sein, wenn die PIVOT-Funktion in Oracle SQL verwendet wird. Dieser Artikel bietet eine Lösung.
Oracles PIVOT erfordert normalerweise die Verwendung von statischen Wertzeichenfolgen in der IN
-Anweisung, zum Beispiel:
<code class="language-sql">... pivot (sum(A) for B in (X)) </code>
Wenn der Wert von B jedoch in einer Datenbankspalte gespeichert und regelmäßig aktualisiert wird, ist eine manuelle Aktualisierung der Zeichenfolge X unpraktisch.
Um dieses Problem zu lösen, können wir einen Trick anwenden, der darin besteht, eine IN
-Zeichenfolge zu erstellen und diese dann in der PIVOT-Abfrage zu verwenden. Lassen Sie es uns aufschlüsseln:
Schritt 1: Erstellen Sie die IN-Zeichenfolge
Um eine Zeichenfolge zu erstellen, verwenden wir die Funktionen COLUMN NEW_VALUE
und LISTAGG
wie folgt:
<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>
Diese Abfrage erstellt eine Zeichenfolge ähnlich der folgenden:
<code>'A' AS A,'B' AS B,'C' AS C</code>
Schritt 2: Strings in PIVOT verwenden
Jetzt können wir diese Zeichenfolge zu unserer PIVOT-Abfrage hinzufügen:
<code class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
Einschränkungen:
Diese Methode bietet zwar eine Lösung, weist jedoch eine Einschränkung auf: Die maximale Länge der Verbindungszeichenfolge beträgt 4000 Byte. Daher ist diese Methode möglicherweise nicht geeignet, wenn die Anzahl der Werte von B sehr groß ist.
Das obige ist der detaillierte Inhalt vonWie führt man dynamische Pivots in Oracle SQL mit unterschiedlichen Werten durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!