Ir para conteúdo

POWERED BY:

Arquivado

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

larissalucena

Ordenação por colunas diferentes dependendo do resultado

Recommended Posts

Pessoal,

 

alguém saberia como posso ordenar resultados por duas colunas diferentes dependendo do resultado? Não sei bem quando é feito o ORDER BY, por isso nem sei mesmo se isso é possível.

 

Explicando melhor o problema:

 

tenho uma tabela Relacionamentos que cada registro contém dois usuários, um origem e outro destino. A consulta deve retornar todos os relacionamentos que envolvem um dado usuário e deve ser ordenada pelo nick de quem se relaciona com ele, ou seja, se o usuário-parâmetro for origem, deve ser usado o nick do destino para ordenação; se o usuário-parâmetro for destino, deve ser usado o nick do origem para ordenação.

 

Agradeço desde já.

 

Larissa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Larissa,

 

uma alternativa é usar o CASE, exemplo:

 

use pubs;

declare @param int
set @param = 1

select * from authors
where state = 'CA'
order by case when  @param = 1 then au_lname else au_id end

com o @param = 1, retorna ordenado pelo campo au_lname:

au_id	   au_lname								 
----------- ---------------------------------------- 
409-56-7008 Bennet
238-95-7766 Carson
427-17-2319 Dull
213-46-8915 Green
472-27-2349 Gringlesby
846-92-7186 Hunter
756-30-7391 Karsen
486-29-1786 Locksley
724-80-9391 MacFeather
893-72-1158 McBadden
267-41-2394 O'Leary
274-80-9391 Straight
724-08-9931 Stringer
172-32-1176 White
672-71-3249 Yokomoto
(15 row(s) affected)

com o @param <> 1, retorna ordenado pelo campo au_id:

au_id	   au_lname								 
----------- ---------------------------------------- 
172-32-1176 White
213-46-8915 Green
238-95-7766 Carson
267-41-2394 O'Leary
274-80-9391 Straight
409-56-7008 Bennet
427-17-2319 Dull
472-27-2349 Gringlesby
486-29-1786 Locksley
672-71-3249 Yokomoto
724-08-9931 Stringer
724-80-9391 MacFeather
756-30-7391 Karsen
846-92-7186 Hunter
893-72-1158 McBadden

(15 row(s) affected)

é só adaptar ai,

 

t+

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Larissa,

 

uma alternativa é usar o CASE, exemplo:

 

use pubs;

declare @param int
set @param = 1

select * from authors
where state = 'CA'
order by case when  @param = 1 then au_lname else au_id end

com o @param = 1, retorna ordenado pelo campo au_lname:

au_id	   au_lname								 
----------- ---------------------------------------- 
409-56-7008 Bennet
238-95-7766 Carson
427-17-2319 Dull
213-46-8915 Green
472-27-2349 Gringlesby
846-92-7186 Hunter
756-30-7391 Karsen
486-29-1786 Locksley
724-80-9391 MacFeather
893-72-1158 McBadden
267-41-2394 O'Leary
274-80-9391 Straight
724-08-9931 Stringer
172-32-1176 White
672-71-3249 Yokomoto
(15 row(s) affected)

com o @param <> 1, retorna ordenado pelo campo au_id:

au_id	   au_lname								 
----------- ---------------------------------------- 
172-32-1176 White
213-46-8915 Green
238-95-7766 Carson
267-41-2394 O'Leary
274-80-9391 Straight
409-56-7008 Bennet
427-17-2319 Dull
472-27-2349 Gringlesby
486-29-1786 Locksley
672-71-3249 Yokomoto
724-08-9931 Stringer
724-80-9391 MacFeather
756-30-7391 Karsen
846-92-7186 Hunter
893-72-1158 McBadden

(15 row(s) affected)

é só adaptar ai,

 

t+

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

Valeu Erivelton!!!!!

Larissa,

 

uma alternativa é usar o CASE, exemplo:

 

use pubs;

declare @param int
set @param = 1

select * from authors
where state = 'CA'
order by case when  @param = 1 then au_lname else au_id end

com o @param = 1, retorna ordenado pelo campo au_lname:

au_id	   au_lname								 
----------- ---------------------------------------- 
409-56-7008 Bennet
238-95-7766 Carson
427-17-2319 Dull
213-46-8915 Green
472-27-2349 Gringlesby
846-92-7186 Hunter
756-30-7391 Karsen
486-29-1786 Locksley
724-80-9391 MacFeather
893-72-1158 McBadden
267-41-2394 O'Leary
274-80-9391 Straight
724-08-9931 Stringer
172-32-1176 White
672-71-3249 Yokomoto
(15 row(s) affected)

com o @param <> 1, retorna ordenado pelo campo au_id:

au_id	   au_lname								 
----------- ---------------------------------------- 
172-32-1176 White
213-46-8915 Green
238-95-7766 Carson
267-41-2394 O'Leary
274-80-9391 Straight
409-56-7008 Bennet
427-17-2319 Dull
472-27-2349 Gringlesby
486-29-1786 Locksley
672-71-3249 Yokomoto
724-08-9931 Stringer
724-80-9391 MacFeather
756-30-7391 Karsen
846-92-7186 Hunter
893-72-1158 McBadden

(15 row(s) affected)

é só adaptar ai,

 

t+

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

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.