Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Pedido personalizado no Oracle SQL


Não sei se isso se qualifica como simples:
order by 
    case 
       when currency = 'USD' then 1 
       when currency = 'BHT' then 2
       when currency = 'JPY' then 3
       when currency = 'MYR' then 4
       else 5
    end

ou um pouco mais compacto, mas específico do Oracle:
order by decode(currency, 'USD', 1, 'BHT', 2, 'JPY', 3, 'MYR', 4, 5)

A solução acima usando números para definir a ordem de classificação não classificará automaticamente as moedas corretamente que não são mencionadas na expressão case/decode.

Para simplesmente colocar USD na frente e não se importar com o resto, os critérios de pedido "gerados" também devem ser um valor de caractere. Você pode usar o seguinte nesse caso:
order by 
    case 
       when currency = 'USD' then '001' 
       else currency
    end

Que usa uma ordenação "alfabética". Isso funciona porque os caracteres são classificados após os dígitos do número. (Usando 'AAA' em vez de '001' funcionaria também).