Вот простой путь без stragg или создания функции.
create table countries ( country_name varchar2 (100));
insert into countries values ('Albania');
insert into countries values ('Andorra');
insert into countries values ('Antigua');
SELECT SUBSTR (SYS_CONNECT_BY_PATH (country_name , ','), 2) csv
FROM (SELECT country_name , ROW_NUMBER () OVER (ORDER BY country_name ) rn,
COUNT (*) OVER () cnt
FROM countries)
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;
CSV
--------------------------
Albania,Andorra,Antigua
1 row selected.
, Поскольку другие упомянули, если Вы находитесь на 11-граммовом R2 или больше, можно теперь использовать listagg, который намного более прост.
select listagg(country_name,', ') within group(order by country_name) csv
from countries;
CSV
--------------------------
Albania, Andorra, Antigua
1 row selected.
Самым быстрым путем это должно использовать Oracle, собирают функцию.
можно также сделать это:
select *
2 from (
3 select deptno,
4 case when row_number() over (partition by deptno order by ename)=1
5 then stragg(ename) over
6 (partition by deptno
7 order by ename
8 rows between unbounded preceding
9 and unbounded following)
10 end enames
11 from emp
12 )
13 where enames is not null
Посещение сайт спрашивают tom и поиск на 'stragg' или 'конкатенацию строк'. Много примеров. Существует также не - зарегистрированная функция оракула для достижения потребностей.
Я должен был всегда писать некоторым МН / SQL для этого, или я просто конкатенирую'', к полю и копии в редактора и удаляют CR из списка, дающего мне одна строка.
таким образом,
select country_name||', ' country from countries
Немного длинный обветренный оба пути.
, Если Вы смотрите на, Спрашивают Tom, Вы будете видеть загрузки возможных решений, но они все возвращаются к описаниям типа и/или МН / SQL