Kolejność transakcji w Oracle SQL

Muszę ustalić kolejność transakcji w oparciu o walutę. Muszę jednak zrealizować niestandardowe zamówienie przez to, że USD zawsze znajduje się na górze, a resztę należy zamówić rosnąco.

na przykład :

  • BHT
  • USD
  • MYR
  • JYP

należy posortować w następujący sposób:

  • USD
  • BHT
  • JPY
  • MYR Czy istnieje prosty sposób, aby sobie z tym poradzić?

1 odpowiedź

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

lub nieco bardziej kompaktowy, ale specyficzny dla Oracle sposób:

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

Powyższe rozwiązanie wykorzystujące liczby do zdefiniowania kolejności sortowania nie spowoduje automatycznego sortowania walut, które nie są wymienione w wyrażeniu case / decode.

Aby po prostu postawić USD na pierwszym planie i nie przejmować się resztą, „wygenerowane” kryteria zamówienia muszą być również wartością znakową. W takim przypadku możesz użyć następujących opcji:

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

Który wykorzystuje porządek „alfabetyczny”. Działa to, ponieważ znaki są sortowane po cyfrach. (Używanie „AAA” zamiast „001” również działałoby).

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.