無需手動修改即可在Oracle SQL中實現動態樞軸表
在Oracle SQL中,PIVOT運算子允許使用者將行轉換為列。但是,標準PIVOT語法要求使用者在IN語句中指定靜態值列表。當值頻繁變化時,這可能會帶來問題,因為它需要手動維護查詢。
為了解決這個問題,可以使用函數和字串連接來建立動態樞軸表。
使用函數進行動態輸入
一種方法是使用函數產生要在IN語句中使用的值字串。例如:
<code class="language-sql">CREATE FUNCTION GetDynamicPivotInString(table_name VARCHAR2, column_name VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN '''' || ( SELECT LISTAGG('''' || value || '''', ',') WITHIN GROUP (ORDER BY value) FROM (SELECT DISTINCT value FROM table_name ORDER BY value) ) || ''''; END;</code>
此函數接受兩個參數:要進行透視的表名和列名。它傳回一個用逗號連接的值字串。
連接字串值
另一種方法是使用NEW_VALUE運算子在PIVOT語句中直接連接值字串:
<code class="language-sql">COLUMN temp_in_statement NEW_VALUE STRING; SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter, ',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM myTable; SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&temp_in_statement));</code>
這種方法確保PIVOT語句總是使用指定列中的最新值。
局限性
這兩種方法都有限制。使用函數需要額外的程式碼維護。連接方法受可連接的字串大小的限制,預設為4000位元組。但是,這些方法提供了靈活性,並且在數據或樞軸值更改時無需手動幹預。
以上是如何在 Oracle SQL 中建立動態資料透視而不需要手動更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!