Sim, é possível fazer isso com LISTAGG.
Veja:
Selecionar tudo
select maquina, produto, listagg( colaborador||';' ) within group (order by maquina, produto)
from
(
select 'maquina 1' maquina, 'produto1' produto, 'colaborado1' colaborador from dual
union select 'maquina 1' maquina, 'produto1' produto, 'colaborado2' colaborador from dual
)
group by maquina, produto
Exemplo:
Selecionar tudo
SQL> select maquina, produto, listagg( colaborador||';' ) within group (order by maquina, produto) lista
2 from
3 (
4 select 'maquina 1' maquina, 'produto1' produto, 'colaborado1' colaborador from dual
5 union select 'maquina 1' maquina, 'produto1' produto, 'colaborado2' colaborador from dual
6 )
7 group by maquina, produto
8 /
MAQUINA PRODUTO LISTA
--------- -------- --------------------------------------------------------------------------------
maquina 1 produto1 colaborado1;colaborado2;
Outro Exemplo com 2 linhas no Group By:
Selecionar tudo
SQL> select maquina, produto, listagg( colaborador||';' ) within group (order by maquina, produto) lista
2 from
3 (
4 select 'AAA' maquina, 'BBB' produto, 'CCC1' colaborador from dual
5 union all
6 select 'AAA' maquina, 'BBB' produto, 'CCC2' colaborador from dual
7 union all
8 select 'AAA' maquina, 'BBB' produto, 'CCC3' colaborador from dual
9 union all
10 select 'AAA' maquina, 'NNN' produto, 'CCC4' colaborador from dual
11 union all
12 select 'AAA' maquina, 'NNN' produto, 'CCC5' colaborador from dual
13 )
14 group by maquina, produto
15 /
MAQUINA PRODUTO LISTA
------- ------- --------------------------------------------------------------------------------
AAA BBB CCC1;CCC2;CCC3;
AAA NNN CCC4;CCC5;
SQL>