Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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