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_VALUE
和LISTAGG
函數,如下所示:
<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中文網其他相關文章!