使用 Oracle LISTAGG 函数消除重复项

Eliminate duplicates using Oracle LISTAGG function(使用 Oracle LISTAGG 函数消除重复项)
本文介绍了使用 Oracle LISTAGG 函数消除重复项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
oracle 中的 LISTAGG 返回不同的值

我正在使用 Oracle LISTAGG 函数,但在我返回的名称列表中,我实际上希望消除重复项并只返回不同的值.

I am using Oracle LISTAGG function but within my list of returned names I actually would like to eliminate duplicates and only return distinct values.

我的查询是这样的:

select a.id,
       a.change_id,
       LISTAGG(b.name, ',') WITHIN GROUP (ORDER BY b.name) AS "Product Name", 
from   table_a a,
       table_b b
where  a.id = 1
and    b.change_id = c.change_id
group by a.id, a.change_id

目前正在返回(只显示一条记录):

At the moment, it is returning (just showing one record):

1    1   NameA, NameA, NameB, NameC, NameD, Name D

我希望返回的是:

1    1   NameA, NameB, NameC, Name D

推荐答案

由于评论中的链接答案没有提供我的解决方案,我还是会发布.

As the linked answers in the comment don't provide my flavor of solution, I'll post it anyway.

我只会使用带有虚拟数据的 table_b 来展示概念,您可以轻松添加您的连接等:

I'll only use table_b with dummy data to show the concept, you can easily add your join etc.:

with table_b as ( -- dummy data
 select 'name'||mod(level,3) name
        ,mod(level,3) id
   from dual
  connect by level < 10
 union all
 select 'name'||mod(level,2) name
        ,mod(level,3) id
   from dual
  connect by level < 10
)
select id
      ,RTRIM (
              XMLAGG (
                      XMLELEMENT (E,XMLATTRIBUTES (name|| ',' AS "Seg")
                      )
                     ORDER BY name ASC
              ).EXTRACT ('./E[not(@Seg = preceding-sibling::E/@Seg)]/@Seg'),
              ','
             ) AS "Product Name"
       ,LISTAGG(b.name, ',') WITHIN GROUP (ORDER BY b.name) AS "Product Name with dups"
  from table_b b
group by id;

(想法取自 https://forums.oracle.com/forums/thread.jspa?messageID=9634767&tstart=0#9943367)

这篇关于使用 Oracle LISTAGG 函数消除重复项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)