[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