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中文网其他相关文章!