2015-05-09 4 views
0

Я делал как следующий запрос и получил ошибку «не групповая групповая функция».Oracle SQL: rtrim и group by

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); 

Я оставил соединение между таблицей 1 и таблицей2, и мне нужно собрать несколько строк в одну строку. Так что я написал:

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

Но когда я пытаюсь сделать это, я получил сообщение об ошибке:

ORA-00937 not a single-group group function 

Я не использую никакого агрегирования в операторе отбора. Что мне делать, чтобы написать rtrim (...) без ошибки?

Заранее спасибо.

ответ

0

Вы должны удалить 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