[firebase-br] Order by Condicional
Rafael - FAV Ferro e Aço
rafael.stella em favcomercial.com.br
Ter Mar 15 10:37:31 -03 2016
Tente fazer assim:
select nome, idade, data,
(case
when (:parametro = 1) then nome
when (:parametro = 2) then cast(idade as varchar)
when (:parametro = 3) then cast(data as varchar) end) ordem
from alunos
where ...
order by ordem
Perceba que todas as colunas usadas para ordenação devem ser convertidas
para um tipo comum, pois não pode haver campos de tipos distintos numa
mesma coluna.
Não testei mas acredito que funcione.
Caso não seja possível ordenar pela coluna nessa etapa, tente colocar a
consulta em um nível abaixo:
select nome, idade, data, ordem
from (
select nome, idade, data,
(case
when (:parametro = 1) then nome
when (:parametro = 2) then cast(idade as varchar)
when (:parametro = 3) then cast(data as varchar) end) ordem
from alunos
where ...
)
order by ordem
Espero que ajude.
--
Rafael Cardoso Stella
Em 15 de março de 2016 10:05, Fábio P. Santos <fpsgyn em gmail.com> escreveu:
>
> Sim, no caso como a consulta é mais complexa tive que construir os blocos
> de if´s.... agora se o case pudesse funcionar dentro da expressão de
> consulta ficaria bem mais fácil,,, se não me engano alguns banco de dados
> aceitam....
>
> Obrigado...
>
> Em 15 de março de 2016 08:04, XSoftware - Armando <armando.boza em gmail.com>
> escreveu:
>
> > Amigo, creio que desta maneira que vc citou não dá mesmo.
> >
> > Eu faço o seguinte, declaro uma variável no input e valido por ela, ex:
> >
> > if vordem = 'sexo' then begin
> >
> > select codigo, nome
> > from alunos
> > order by sexo
> >
> > end
> >
> > if vordem = 'idade' then begin
> >
> > select codigo, nome
> > from alunos
> > order by idade
> >
> > end
> >
> > Simples assim.
> >
> > Att
> > Armando
> >
> >
> > Em 14/03/2016 11:30, Fábio P. Santos escreveu:
> >
> >> Bom dia colegas,
> >>
> >> existe uma maneira de criar um order by condicional ?
> >>
> >> exemplo:
> >>
> >> select codigo, nome
> >> from alunos
> >> order by sexo
> >>
> >> select codigo, nome
> >> from alunos
> >> order by idade
> >>
> >> para não ter de repetir as duas select´s dentro de uma stored procedure
> >> dependendo de uma condição de order by, algo do tipo:
> >>
> >> select codigo, nome
> >> from alunos
> >> {condicao} then order by sexo
> >> {condicao} then order by idade
> >>
> >> Obrigado....
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas:
> >> http://www.firebase.com.br/pesquisa_lista.html
> >>
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas:
> > http://www.firebase.com.br/pesquisa_lista.html
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
http://www.firebase.com.br/pesquisa_lista.html
Mais detalhes sobre a lista de discussão lista