Соединение строк в одну ячейку через разделитель
with test_asg as (
select 100 ASSIGNMENT_ID, 'Comp info' TITLE, 'AP' EMP_CAT from dual union all
select 100,'Technician','AP' from dual union all
select 101,'Faculty','AP' from dual union all
select 102,'Teaching','CS' from dual union all
select 102,'Grad Assist','CS' from dual union all
select 102,'Secretary','AP' from dual union all
select 103,'Director','AP' from dual
)
select assignment_id, substr(asg_title,2) JOB_TITLE, substr(asg_empcat,2) EMP_CATEGORY
from (
select assignment_id, max(sys_connect_by_path(title,';')) asg_title, max(sys_connect_by_path(emp_cat,';')) asg_empcat
from (
select assignment_id, title, emp_cat, row_number() over (partition by assignment_id order by assignment_id) rnum
from test_asg
)
start with rnum = 1
connect by prior rnum = rnum-1 and prior assignment_id = assignment_id
group by assignment_id
order by assignment_id
)
order by assignment_id;
результат:
ASSIGNMENT_ID JOB_TITLE EMP_CATEGORY
-----------------------------------------------------------
100 Comp info;Technician AP;AP
101 Faculty AP
102 Teaching;Grad Assist;Secretary CS;CS;AP
103 Director AP
источник:
http://www.blog.arun-prabha.com/2009/02/23/oracle-sql-converting-multiple-rows-into-single-row/
вопрос: есть способы делать то же самое эффективнее?