Oracle
 sql >> база данни >  >> RDS >> Oracle

Персонализирана поръчка в Oracle SQL

Не знам дали това се квалифицира като просто:

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

или малко по-компактен, но специфичен за Oracle:

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

Горното решение, използващо числа за дефиниране на реда на сортиране, няма автоматично да сортира правилно валутите, които не са споменати в израза case/decode.

За да поставите USD на първо място и да не се интересувате от останалото, "генерираните" критерии за поръчка трябва също да бъдат стойност на символа. В този случай можете да използвате следното:

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

Което използва "азбучен" ред. Това работи, защото знаците се сортират след цифрите на числата. (Използвайки 'AAA' вместо '001' също ще работи).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте типа данни за времеви отпечатъци в unix времеви печат Oracle

  2. Oracle DROP TABLE АКО СЪЩЕСТВУВА Алтернативи

  3. Свързване на Oracle към SQL Server през защитена връзка

  4. MOD() Функция в Oracle

  5. Разлика между клауза WITH и подзаявка?