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).