2013-08-02 4 views
0

У меня возникли проблемы с моей функцией LISTAGG. Я продолжаю получать ошибку ORA-00937: не одна групповая функция. Я ошибся в этой ошибке, но до сих пор не совсем понятно, что случилось.Функция SQL Listagg - ошибка

Сценарий: У меня есть таблица сегментов. В сегменте может быть назначено несколько человек (от одного до многих). Мне нужен мой вывод/отчет, чтобы показать номер сегмента в одном столбце и список пользователей в другом.

Запрос:

select fcs.nld_flood_control_segment_id 
     , fcs.fc_segment_name 
     , fcs.fc_segment_abbrev_name 
     , LISTAGG(ps.first_name|| ' ' ||ps.last_name, ', ') within group (ORDER BY fcs.nld_flood_control_segment_id, ps.last_name) "ListOfReps" 
     from nld_flood_control_segments fcs 
     , nld_fc_segment_person_xref xr 
     , persons      ps 
    where fcs.nld_flood_control_segment_id = :P1_id 
     and :P1_id       = xr.nld_flood_control_segment_id 
     and xr.person_id      = ps.person_id 
    order by nld_flood_control_segment_id asc 
     ; 

Любая помощь будет принята с благодарностью. Заранее спасибо.

ответ

2

Функция LISTAGG имеет следующую структуру синтаксиса:

LISTAGG([,]) WITHIN GROUP (ORDER BY) [OVER (PARTITION BY)] 

LISTAGG представляет собой совокупность функции, которая необязательно может быть использована в качестве аналитического (то есть дополнительного НАД() п). Следующие элементы являются обязательными:

the column or expression to be aggregated; 
the WITHIN GROUP keywords; 
the ORDER BY clause within the grouping. 

Пример:

LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees 

Попробуйте сделать следующее, чтобы увидеть, если это обеспечит то, что вам нужно.

LISTAGG(ps.first_name|| ' ' ||ps.last_name, ',') within group (ORDER BY ps.first_name|| ' ' ||ps.last_name) "ListOfReps" 
Смежные вопросы