Seu case tem que estar no select e aí sim você faz o order by nele.
D
Dota
Tenho uma consulta aqui assim:
SELECT * FROM PRODUTO
ORDER BY
CASE
WHEN status = 'aprovado' THEN 1
WHEN status = 'reprovado' THEN 2
WHEN status = 'liberado' THEN 3
WHEN status = 'entregue' THEN 4
ELSE 5 END
Só queria entender o order by
drsmachado
Este order by será definido caso o vaor da coluna status retorne um valor de 1 a 5, sendo que este último não dá ordenação alguma.
Caso status seja igual 1 até 4, ele irá ordenar pela 1ª, 2ª, 3ª ou 4ª coluna, unicamente.
Detalhe é que se este select retornar mais de 1 linha, a ordenação poderá ser inútil, pois a primeira linha pode ter status 1, a segunda, status 4 e assim por diante.
D
Dota
drsmachado:
Este order by será definido caso o vaor da coluna status retorne um valor de 1 a 5, sendo que este último não dá ordenação alguma.
Caso status seja igual 1 até 4, ele irá ordenar pela 1ª, 2ª, 3ª ou 4ª coluna, unicamente.
Detalhe é que se este select retornar mais de 1 linha, a ordenação poderá ser inútil, pois a primeira linha pode ter status 1, a segunda, status 4 e assim por diante.
O intuito do select é trazer primeiro todos aprovados depois todos reprovados depois todos liberados depois todos entregues, nao seria isso?
drsmachado
Dota:
drsmachado:
Este order by será definido caso o vaor da coluna status retorne um valor de 1 a 5, sendo que este último não dá ordenação alguma.
Caso status seja igual 1 até 4, ele irá ordenar pela 1ª, 2ª, 3ª ou 4ª coluna, unicamente.
Detalhe é que se este select retornar mais de 1 linha, a ordenação poderá ser inútil, pois a primeira linha pode ter status 1, a segunda, status 4 e assim por diante.
O intuito do select é trazer primeiro todos aprovados depois todos reprovados depois todos liberados depois todos entregues, nao seria isso?
Então não precisa do case, basta colocar o order by com a ordem que deseja trazer os resultados.
CASE é utilizado quando se quer trazer resultados que dependam de determinada condição (em geral, mais que 2, caso contrário, pode-se utilizar o IF ELSE).
A
ADEMILTON
na minha opinião sim seria isso mesmo
para alcançar o resultado de “primeiro todos aprovados depois todos reprovados depois todos liberados depois todos entregues” precisa mesmo usar o case, porque se aplicar o order by direto sobre o campo o resultado vai ser uma ordenação alfabética…
evertonsilvagomesjav
na minha opinião sim seria isso mesmo
para alcançar o resultado de “primeiro todos aprovados depois todos reprovados depois todos liberados depois todos entregues” precisa mesmo usar o case, porque se aplicar o order by direto sobre o campo o resultado vai ser uma ordenação alfabética…
Pois é como estão todos no mesmo campo status, nao vejo como fazer de outra forma, ou tem?
A
ADEMILTON
se fosse num Oracle seria assim:
Explicando: a função decode avalia o campo que é passado no primeiro parâmetro, se o conteúdo for igual ao segundo parâmetro, retorna o terceiro parâmetro, se for igual ao quarto, retorna o quinto, e assim vai… se não for igual a nenhum retorna o último.
Alguns outros bancos implementam funções semelhantes, precisa ver a documentação de cada um
D
Dota
Ademilton, o que nao consigo entender é esse retorno ser um int(numero)
igual no case por exemplo:
order by
case
when status = 'aprovado' then 1
Eu nao entendo isso, o que o número 1 vai fazer?
Não entendo a execução se status for igual a aprovado então 1, como assim?
A
ADEMILTON
no campo status você tem estes valores:
‘aprovado’
‘reprovado’
‘liberado’
‘entregue’
Se aplicasse uma ordenação direta sobre o campo, ficaria
‘aprovado’
‘entregue’
‘liberado’
‘reprovado’
O que o case tá fazendo aí é substituir o valor aprovado por 1, reprovado por 2, liberado por 3, entregue por 4 e qualquer outra coisa por 5. Então aplicando a ordenação sobre estes inteiros que são resultado da substituição, você chega na ordenação conforme tá especificado.
D
Dota
Hummm Ademilton, valeu cara, todas as linhas que ele retornar ele irá substituir pelo número em questão né, e depois fazer a ordenação