【问题标题】:combine multiple rows result into one row将多行结果合并为一行
【发布时间】:2026-02-09 10:50:02
【问题描述】:

我想使用 XMLAGG 函数将多个结果合并到一行中 这是我正在使用的

RTRIM(XMLAGG(XMLELEMENT(E,B.TEAM_NAME,',').EXTRACT('//text()') ORDER BY 
B.TEAM_NAME ).GetClobVal(),',') MY_TEAM_NAMES, 
RTRIM(XMLAGG(XMLELEMENT(E,A.TEAM_NAME,',').EXTRACT('//text()') ORDER BY 
A.TEAM_NAME).GetClobVal(),',') YOUR_TEAM_NAMES

我想获得独特的结果并将它们合并到一行中的两列。 目前我得到的结果如下:-

MY_TEAM_NAMES                 
Klaus Directs,Klaus Directs,Klaus Directs,Klaus team,Klaus team,Night Riders,Night Riders

YOUR_TEAM_NAMES
Beckham Team,Louise Golf Team,Louise Golf Team,Louise Golf Team,Louise Peers,Louise Peers,Louise Peers

但我想从 MY_TEAM_NAMES 和 YOUR_TEAM_NAMES 中删除重复值。

有一种解决方案可以在 from 子句中使用 distinct 关键字,但在这种情况下无法使用。这些结果最初是以下格式的关系:

MY_TEAM_NAMES   YOUR_TEAM_NAMES 
Klaus Directs   Louise Peers
Night Riders    Louise Peers
Klaus Directs   Beckham Team
Klaus Directs   Louise Golf Team
Klaus team      Louise Peers
Klaus team      Louise Golf Team
Night Riders    Louise Golf Team

【问题讨论】:

  • 样本数据会很有帮助。您的查询引用了两个表,但您的描述表明只有一个。
  • 您不能将XMLAGG 应用于已经明确选择的值吗?

标签: sql oracle listagg


【解决方案1】:

您可以尝试在主查询之前使用distinct...例如:

with tmpT as 
(
select 'Klaus Directs' as MY_TEAM_NAMES, 'Louise Peers' as YOUR_TEAM_NAMES from dual
union all select 'Night Riders', 'Louise Peers' from dual
union all select 'Klaus Directs', 'Beckham Team' from dual
union all select 'Klaus Directs', 'Louise Golf Team' from dual
union all select 'Klaus team', 'Louise Peers' from dual
union all select 'Klaus team', 'Louise Golf Team' from dual
union all select 'Night Riders', 'Louise Golf Team' from dual
)
select listagg(decode(typeR,1,TEAM_NAMES,null),', ') within group (order by TEAM_NAMES) as MY_TEAM_NAMES 
     , listagg(decode(typeR,2,TEAM_NAMES,null),', ') within group (order by TEAM_NAMES) as YOUR_TEAM_NAMES
  from (select distinct MY_TEAM_NAMES as TEAM_NAMES, 1 as typeR from tmpT
        union select distinct YOUR_TEAM_NAMES, 2 from tmpT
       )

【讨论】:

  • 我不能在主查询之前使用 distinct,因为它会给我两个团队的不同组合,但我的最终结果应该是 MY_TEAM_NAMES Night Riders,Klaus directs, Klaus Team YOUR_TEAM_NAMES Louise Peers, Becham Team, Louise Golf这意味着最终结果应该有两列名称为 MY_TEAM_NAMES 和 YOUR_TEAM_NAMES 的团队,并且应该只有一个结果,而不需要重复 MY_TEMA_NAMES 和 YOUR_TEAM_NAMES 中的团队,如上所述。
最近更新 更多