sql >> Databasteknik >  >> RDS >> Oracle

Anpassad ordning i Oracle SQL

Vet inte om detta är så enkelt:

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

eller lite mer kompakt men Oracle-specifik:

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

Ovanstående lösning som använder siffror för att definiera sorteringsordningen kommer inte automatiskt att sortera valutor korrekt som inte nämns i fallet/avkodningsuttrycket.

För att helt enkelt sätta USD längst fram och inte bry sig om resten, måste de "genererade" ordningskriterierna också vara ett teckenvärde. Du kan använda följande i så fall:

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

Som använder en "alfabetisk" ordning. Detta fungerar eftersom tecken sorteras efter siffrorna. (Med 'AAA' istället för '001' skulle fungera också).



  1. De bästa PostgreSQL-säkerhetshoten

  2. ORA-24550:signal mottagen:[si_signo=6] fel

  3. MySQL ISNULL() Förklarat

  4. Hur castar man json array till text array?