Heim >Datenbank >MySQL-Tutorial >Wie führt man dynamische Pivots in Oracle SQL mit unterschiedlichen Werten durch?

Wie führt man dynamische Pivots in Oracle SQL mit unterschiedlichen Werten durch?

Susan Sarandon
Susan SarandonOriginal
2025-01-24 00:57:10697Durchsuche

How to Perform Dynamic Pivots in Oracle SQL with Varying Values?

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!

Stellungnahme:
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