首頁 > 資料庫 > mysql教程 > 如何在 Oracle SQL 中使用不同的值執行動態透視?

如何在 Oracle SQL 中使用不同的值執行動態透視?

Susan Sarandon
發布: 2025-01-24 00:57:10
原創
692 人瀏覽過

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

Oracle SQL動態樞軸表:應對變化值

在Oracle SQL中使用PIVOT函數時,處理IN語句中的動態值可能很棘手。本文提供一種解決方案。

Oracle的PIVOT通常需要IN語句中使用靜態值字串,例如:

<code class="language-sql">... pivot (sum(A) for B in (X))  </code>
登入後複製

但是,如果B的值儲存在資料庫列中並且定期更新,則手動更新字串X變得不切實際。

為了解決這個問題,我們可以使用一個技巧,它涉及創建IN字串,然後在PIVOT查詢中使用它。讓我們分解一下:

步驟1:建構IN字串

為了建立字串,我們使用COLUMN NEW_VALUELISTAGG函數,如下所示:

<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>
登入後複製

此查詢建立一個類似以下內容的字串:

<code>'A' AS A,'B' AS B,'C' AS C</code>
登入後複製

步驟2:在PIVOT中使用字串

現在,我們可以將此字串新增到我們的PIVOT查詢中:

<code class="language-sql">SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
登入後複製

限制:

雖然此方法提供了一種解決方案,但它有一個限制:連接字串的最大長度為4000位元組。因此,如果B的值數量非常多,則此方法可能不適用。

以上是如何在 Oracle SQL 中使用不同的值執行動態透視?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板