Oracle
 sql >> Database >  >> RDS >> Oracle

Ordine personalizzato in Oracle SQL

Non so se questo si qualifica come semplice:

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 po' più compatto ma specifico per Oracle:

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

La soluzione precedente che utilizza i numeri per definire l'ordinamento non ordina automaticamente le valute che non sono menzionate nell'espressione maiuscolo/decodifica.

Per mettere semplicemente USD in primo piano e non preoccuparsi del resto, anche i criteri dell'ordine "generato" devono essere un valore di carattere. In tal caso puoi utilizzare quanto segue:

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

Che utilizza un ordinamento "alfabetico". Funziona perché i caratteri sono ordinati dopo le cifre dei numeri. (Utilizzando 'AAA' invece di '001' funzionerebbe ugualmente).