Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Bassi Kleer

Trazer o segundo registro de uma subquery

Recommended Posts

Boa Tarde procurei mas não achei a resposta no forem então resolvi criar este tópico, tenho pouco conhecimento Oracle então desculpe se o que vou perguntar é algo simples..
Vou dar um exemplo simples:
Tenho uma tabela de clientes e cores onde repete o cliente para cada cor selecionada:

Nunca terei mais que 3 Cores por cliente..

Clientes | Cores
Joao	 | Azul
Joao	 | Amarelo
Joao	 | Verde
Maria	 | Azul
Maria	 | Laranja
Carlos	 | Verde



Queria um resultado da sequinte forma:

Cliente	| Cor1		| Cor2		| Cor3	|
Joao	| Amarelo	| Azul	 	| Verde	|
Maria	| Azul		| Laranja	|	|
Carlos	|		|		|	|

Tentei fazer uma subQuery

Select x.cliente,
(select cores from Tabela_A where x.cliente = cliente and ROWNUM = 1) as cor1,
(select cores from Tabela_A where x.cliente = cliente and ROWNUM = 2) as cor2,
(select cores from Tabela_A where x.cliente = cliente and ROWNUM = 3) as cor3
from Tablea_A x

Mas ele não retorna dados quando filtro ROWNUM =2 ou 3


Descobri que ao usar ROWNUM  no WHERE ele recebe por default valor 1 então como resolver o meu problema?
 

 

CREATE TABLE dados(cliente  VARCHAR(50),
                   cores VARCHAR(50));

INSERT INTO dados
VALUES('João', 'Azul'),
	  ('João', 'Vermelho'),
	  ('João', 'Amarelo'),
	  ('Maria', 'Laranja'),
	  ('Maria', 'Amarelo'),
	  ('Carlos', 'Verde');

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma coluna de sequência na tabela ?

Um CASE poderia ser usado.

 

 

Uma outra solução pode ser usar o LISTAGG.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Resolvi, com 3 querys usando rownum > 3 e < 3 para conseguir pegar o registro! 

 

<select * 
  from ( select a.*, rownum rnum
           from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
          where rownum <= N_ROWS )
 where rnum >= N_ROWS>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.