Oracle
 sql >> Base de données >  >> RDS >> Oracle

Commande personnalisée dans Oracle SQL

Je ne sais pas si cela peut être qualifié de 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

ou un peu plus compact mais spécifique à Oracle :

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

La solution ci-dessus utilisant des nombres pour définir l'ordre de tri ne triera pas automatiquement correctement les devises qui ne sont pas mentionnées dans l'expression case/decode.

Pour simplement mettre USD au premier plan et ne pas se soucier du reste, les critères de commande "générés" doivent également être une valeur de caractère. Vous pouvez utiliser ce qui suit dans ce cas :

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

Qui utilise un ordre "alphabétique". Cela fonctionne parce que les caractères sont triés après les chiffres du nombre. (En utilisant 'AAA' au lieu de '001' fonctionnerait aussi).