Какую базу данных вы используете? PL / SQL предлагает Oracle, но здесь нет функции stringagg
- сейчас мы используем listagg
. Последняя версия Oracle поддерживает listagg(distinct ...)
, что решает вашу проблему.
В противном случае сначала выберите distinct
значения из таблицы, затем примените агрегирование к уже отдельным набор данных.
Это то, что у вас есть сейчас:
SQL> select listagg(job, ',') within group (order by job) jobs from emp;
JOBS
--------------------------------------------------------------------------------
ANALYST,ANALYST,CLERK,CLERK,CLERK,CLERK,MANAGER,MANAGER,MANAGER,PRESIDENT,SALESM
AN,SALESMAN,SALESMAN,SALESMAN
Это то, что вы хотите, но ваша версия Oracle базы данных не поддерживает его:
SQL> select listagg(distinct job, ',') within group (order by job) jobs from emp;
select listagg(distinct job, ',') within group (order by job) jobs from emp
*
ERROR at line 1:
ORA-30482: DISTINCT option not allowed for this function
Вот что вам следует сделать:
SQL> select listagg(job, ',') within group (order by job) jobs
2 from (select distinct job from emp);
JOBS
--------------------------------------------------------------------------------
ANALYST,CLERK,MANAGER,PRESIDENT,SALESMAN
SQL>