Jump to content
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');

 

Share this post


Link to post
Share on other sites

Existe uma coluna de sequência na tabela ?

Um CASE poderia ser usado.

 

 

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

Share this post


Link to post
Share on other 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>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.