Oracle 相當於 MySQL 的 GROUP_CONCAT
MySQL 的 GROUP_CONCAT
函數有效地將多行組合成一個字串。 Oracle 提供了多種方法來實現相同的結果,具體取決於您的資料庫版本。
LISTAGG:首選方法(Oracle 11g 及更高版本)
LISTAGG
函數是現代 Oracle 版本(11g 及更高版本)的建議方法。它為連接組內的值提供了一個乾淨且有效率的解決方案:
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names FROM table_x GROUP BY col1</code>
此查詢按 col1
將行分組,並連接對應的 col2
值,以逗號和空格分隔,按 col2
.
自訂函數:適用於較舊的 Oracle 版本(10g 及更早版本)
對於缺少LISTAGG
的Oracle 10g及更早版本,需要自訂函數:
<code class="language-sql">CREATE OR REPLACE FUNCTION get_concatenated_values (input_val IN NUMBER) RETURN VARCHAR2 IS concatenated_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP concatenated_text := concatenated_text || ',' || x.col2; END LOOP; RETURN LTRIM(concatenated_text, ','); END; /</code>
用法:
<code class="language-sql">SELECT col1, get_concatenated_values(col1) FROM table_name;</code>
此函數迭代與輸入值相符的行,並將 col2
值附加到字串。 LTRIM
函數刪除前導逗號。
WM_CONCAT:謹慎使用
一些較舊的 Oracle 版本可能包括 WM_CONCAT
。但是,它是一個不支援的功能,其行為在不同版本之間可能不一致。 因此,強烈建議避免使用 WM_CONCAT
並使用 LISTAGG
或自訂函數:
<code class="language-sql">SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;</code>
選擇適合您的 Oracle 版本的方法。 LISTAGG
是較新版本的首選且最可靠的解決方案。 對於舊版本,自訂函數提供了一個強大的替代方案。 除非絕對必要,否則避免 WM_CONCAT
並了解其限制。
以上是如何替換Oracle中MySQL的GROUP_CONCAT?的詳細內容。更多資訊請關注PHP中文網其他相關文章!