Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Benutzerdefinierte Reihenfolge in Oracle SQL

Weiß nicht, ob das so einfach ist:

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

oder etwas kompakter, aber Oracle-spezifisch:

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

Die obige Lösung, die Zahlen verwendet, um die Sortierreihenfolge zu definieren, wird Währungen, die nicht im case/decode-Ausdruck nicht erwähnt werden, nicht automatisch korrekt sortieren.

Um einfach USD an die Spitze zu setzen und sich um den Rest nicht zu kümmern, muss das "generierte" Bestellkriterium auch ein Zeichenwert sein. Sie können in diesem Fall Folgendes verwenden:

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

Welche eine "alphabetische" Reihenfolge verwendet. Dies funktioniert, weil Zeichen nach den Zahlenziffern sortiert werden. (Mit 'AAA' statt '001' würde auch funktionieren).