首頁 > 資料庫 > mysql教程 > 如何使用動態值動態透視 Oracle SQL 表?

如何使用動態值動態透視 Oracle SQL 表?

Patricia Arquette
發布: 2025-01-24 01:01:10
原創
380 人瀏覽過

How to Dynamically Pivot Oracle SQL Tables with Dynamic Values?

Oracle SQL動態樞軸及動態值

在Oracle SQL中使用資料透視表時,一個常見的挑戰是建立具有動態值的透視表。傳統方法是手動將新值新增至透視表IN語句中使用的靜態字串,這種方法效率低。

動態IN語句的限制

使用子查詢、PL/SQL變數或巢狀查詢將動態語句直接嵌入PIVOT IN語句中不受支援。此外,使用PIVOT XML可能會導致輸出不理想。

解決方案:建立動態IN字串

為了克服這些限制,可以使用建立動態IN字串的方法。以下是逐步指南:

  1. 建立用於產生動態字串的SELECT語句:

    • 使用COLUMN NEW_VALUE和LISTAGG將所需的值連接成單一字串,以逗號分隔。
    • 將此字串儲存在一個變數中,例如str_in_statement。
  2. 範例: 考慮以下範例表:

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

要產生動態IN字串,請執行下列語句:

<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>
登入後複製
  1. 將動態字串合併到透視查詢中:

    • 使用包含動態字串的變數作為透視查詢的IN參數。
  2. 範例透視查詢:

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

輸出:

<code>| MYNUMBER | A_VAL | B_VAL | C_VAL |
|---|---|---|---|
| 1 | 2 | 4 | NULL |
| 2 | 8 | 10 | 6 |
| 3 | 14 | NULL | 12 |</code>
登入後複製

限制:

此方法的限制在於可以連接的最大字串大小為4000位元組。

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

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