問題:
如何在 Oracle 中將指定列中的多個值連接成單一逗號分隔的字串?輸入資料遵循特定格式,所需輸出應為每個唯一鍵分組並連接值。
解答:
對於 Oracle 11g 及更高版本:
使用 LISTAGG 函數:
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names" FROM table_x GROUP BY col1</code>
對於 Oracle 10g 及更低版本:
一種方法是建立一個自訂函數:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val IN NUMBER) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; /</code>
使用方法:
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
注意: Oracle 11g 之前的版本對 WM_CONCAT 函數的支援有限,但由於潛在問題,不建議使用該函數(有關詳細信息,請參閱 Oracle 文件)。
在 MySQL 中(僅供參考):
GROUP_CONCAT 函數可用:
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
以上是舊版 Oracle 中是否有與 MySQL 的 GROUP_CONCAT 等效的 LISTAGG?的詳細內容。更多資訊請關注PHP中文網其他相關文章!