Como ajustar o retorno da query transformando linha?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Det
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Sex, 20 Dez 2019 2:29 pm

Boa tarde.
Segue uma simulação para mostrar o cenário que preciso.
O script abaixo, retorna 2 linha onde só a ultima coluna é diferente.
Preciso transformar a última coluna em um única linha para quando as 2 primeiro colunas tem a mesma informação.
Seria um distinct e transformando a última coluna em uma lista.

Selecionar tudo

select * from
(
select 'maquina 1' maquina, 'produto1' produto, 'colaborado1' colaborador from dual
union select 'maquina 1' maquina, 'produto1' produto, 'colaborado2' colaborador from dual
)
Preciso que o retorno da query seja:
maquina1,produto1,(colaborador1/colaborador2)

Obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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> 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes