Oracle LISTAGG:產生唯一值的字串
Oracle 的 LISTAGG
函數對於將列值連接成單一字串非常有用。 但是,僅取得聚合字串中的不同值需要特定的方法。本指南示範了有效的方法,避免了對自訂函數或預存程序的需求。
Oracle 19c 及更高版本:直接利用 DISTINCT
對於 Oracle 19c 及後續版本,DISTINCT
關鍵字可以無縫整合在 LISTAGG
函數本身:
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Oracle 18c 及更早版本:使用子查詢
在較舊的 Oracle 版本(18c 及更早版本)中,需要在聚合之前使用子查詢來過濾唯一值:
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
合併多個欄位
以下查詢擴展了功能以包含多個列,演示了適用於更複雜場景的強大方法:
<code class="language-sql">SELECT DISTINCT col1, listagg(col2, ',') OVER (PARTITION BY col1 ORDER BY col2) AS col2_list FROM table_name WHERE RN = 1 GROUP BY col1 ORDER BY col1;</code>
總之,使用 DISTINCT
關鍵字(19c 及以上)或子查詢(18c 及以下),您可以有效產生僅包含唯一值的 LISTAGG
結果。這些技術提供了跨不同 Oracle 版本的靈活性,並有助於在需要時包含多個欄位。
以上是使用Oracle的LISTAGG函數時如何確保不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!