Oracle SQL:rtrim 和分组依据

Oracle SQL: rtrim and group by

我正在执行以下查询并收到 "not a single-group group function" 错误。

select distinct a.col1, 
       a.col2,
       rtrim(xmlagg(xmlelement(e, b.col1 ||',')).extract('//text()'), ','),
       rtrim(xmlagg(xmlelement(e, b.col2 ||',')).extract('//text()'), ',')
from table1 a
where a.col3 like '%string%'
left join table2 b on (a.pid = b.pid);

我确实在 table1 和 table2 之间进行了左连接,我需要将多行聚合为一行。所以我写道:

rtrim(xmlagg(xmlelement(e, b.col1 ||',')).extract('//text()'), ','),
rtrim(xmlagg(xmlelement(e, b.col2 ||',')).extract('//text()'), ',') 

但是当我尝试这样做时,我收到了一个错误:

ORA-00937 not a single-group group function

我没有在 select 语句中使用任何聚合。我应该怎么做才能写 rtrim(...) 没有错误?

提前致谢。

您需要删除 DISTINCT 并改用 GROUPING,因为您使用的是聚合函数。

select a.col1, 
       a.col2,
       rtrim(xmlagg(xmlelement(e, b.col1 ||',')).extract('//text()'), ','),
       rtrim(xmlagg(xmlelement(e, b.col2 ||',')).extract('//text()'), ',')
from table1 a
where a.col3 like '%string%'
left join table2 b on (a.pid = b.pid)
GROUP BY a.col1, 
       a.col2