sql >> Database >  >> RDS >> Oracle

Aangepaste volgorde in Oracle SQL

Ik weet niet of dit als eenvoudig kwalificeert:

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

of een beetje compacter maar Oracle-specifiek:

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

De bovenstaande oplossing waarbij getallen worden gebruikt om de sorteervolgorde te definiëren, sorteert valuta's die niet worden vermeld in de case/decode-expressie niet automatisch correct.

Om gewoon USD op de voorgrond te plaatsen en de rest niet te interesseren, moeten de "gegenereerde" bestelcriteria ook een tekenwaarde zijn. U kunt in dat geval het volgende gebruiken:

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

Die een "alfabetische" volgorde gebruikt. Dit werkt omdat tekens worden gesorteerd na de cijfercijfers. (Met 'AAA' in plaats van '001' zou ook werken).



  1. Oracle, maak datum tijd de eerste dag van de maand

  2. Waarom zou ik int gebruiken in plaats van een byte of short in C#

  3. SQL Server 2017-back-up -1

  4. MS Access-oproep SQL Server opgeslagen procedure