Oracle SQL動態樞軸及動態值
在Oracle SQL中使用資料透視表時,一個常見的挑戰是建立具有動態值的透視表。傳統方法是手動將新值新增至透視表IN語句中使用的靜態字串,這種方法效率低。
動態IN語句的限制
使用子查詢、PL/SQL變數或巢狀查詢將動態語句直接嵌入PIVOT IN語句中不受支援。此外,使用PIVOT XML可能會導致輸出不理想。
解決方案:建立動態IN字串
為了克服這些限制,可以使用建立動態IN字串的方法。以下是逐步指南:
建立用於產生動態字串的SELECT語句:
範例: 考慮以下範例表:
<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>
將動態字串合併到透視查詢中:
範例透視查詢:
<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中文網其他相關文章!