Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan Pivot Dinamik dalam Oracle SQL dengan Nilai Berbeza-beza?

Bagaimana untuk Melaksanakan Pivot Dinamik dalam Oracle SQL dengan Nilai Berbeza-beza?

Susan Sarandon
Lepaskan: 2025-01-24 00:57:10
asal
692 orang telah melayarinya

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

Jadual Pangsi Dinamik Oracle SQL: Menghadapi Perubahan Nilai

Mengendalikan nilai dinamik dalam IN pernyataan boleh menjadi rumit apabila menggunakan fungsi PIVOT dalam Oracle SQL. Artikel ini menyediakan penyelesaian.

PIVOT Oracle biasanya memerlukan penggunaan rentetan nilai statik dalam pernyataan IN, contohnya:

<code class="language-sql">... pivot (sum(A) for B in (X))  </code>
Salin selepas log masuk

Walau bagaimanapun, jika nilai B disimpan dalam lajur pangkalan data dan dikemas kini dengan kerap, mengemas kini rentetan X secara manual menjadi tidak praktikal.

Untuk menyelesaikan masalah ini, kita boleh menggunakan helah yang melibatkan mencipta rentetan IN dan kemudian menggunakannya dalam pertanyaan PIVOT. Mari kita pecahkan:

Langkah 1: Bina rentetan IN

Untuk mencipta rentetan, kami menggunakan fungsi COLUMN NEW_VALUE dan LISTAGG seperti berikut:

<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>
Salin selepas log masuk

Pertanyaan ini membina rentetan yang serupa dengan:

<code>'A' AS A,'B' AS B,'C' AS C</code>
Salin selepas log masuk

Langkah 2: Menggunakan rentetan dalam PIVOT

Kini kami boleh menambah rentetan ini pada pertanyaan PIVOT kami:

<code class="language-sql">SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
Salin selepas log masuk

Sekatan:

Walaupun kaedah ini menyediakan penyelesaian, kaedah ini mempunyai had: panjang maksimum rentetan sambungan ialah 4000 bait. Oleh itu, kaedah ini mungkin tidak sesuai jika bilangan nilai B sangat besar.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pivot Dinamik dalam Oracle SQL dengan Nilai Berbeza-beza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan