sql >> Base de Datos >  >> RDS >> Oracle

Orden personalizado en Oracle SQL

No sé si esto califica como simple:

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

o un poco más compacto pero específico de Oracle:

order by decode(currency, 'USD', 1, 'BHT', 2, 'JPY', 3, 'MYR', 4, 5)

La solución anterior que usa números para definir el orden de clasificación no ordenará automáticamente las monedas correctamente que no se mencionan en la expresión de mayúsculas y minúsculas.

Para simplemente poner USD al frente y no preocuparse por el resto, el criterio de pedido "generado" también debe ser un valor de carácter. Puede usar lo siguiente en ese caso:

order by 
    case 
       when currency = 'USD' then '001' 
       else currency
    end

Que utiliza un orden "alfabético". Esto funciona porque los caracteres se ordenan después de los dígitos del número. (Usando 'AAA' en lugar de '001' funcionaría también).