Rud*_*udy 59 sql oracle sql-order-by
我需要根据货币订购交易.但是我需要实现一个自定义订单,这使得美元始终位于顶部,其余的应该按顺序排序.
例如 :
应按如下排序:
有一个简单的方法来处理这个?
a_h*_*ame 110
不知道这是否合格:
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
Run Code Online (Sandbox Code Playgroud)
或者更紧凑但特定于Oracle:
order by decode(currency, 'USD', 1, 'BHT', 2, 'JPY', 3, 'MYR', 4, 5)
Run Code Online (Sandbox Code Playgroud)
上面使用数字来定义排序顺序的解决方案不会自动对货币/解码表达式中未提及的货币进行自动排序.
简单地将美元放在前面并且不关心其余部分,"生成的"订单标准也必须是字符值.在这种情况下,您可以使用以下内容:
order by
case
when currency = 'USD' then '001'
else currency
end
Run Code Online (Sandbox Code Playgroud)
它使用"按字母顺序"排序.这是有效的,因为字符在数字后面排序.(使用'AAA'而不是'001'工作).
Grz*_*z W 21
要确保您的排序"灵活"并且适用于所有货币,请执行以下操作:
SELECT <columns>
FROM <tableName>
ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn
Run Code Online (Sandbox Code Playgroud)
更详细的方法,如果您有兴趣将某些值排序到开头或结尾,但将这些值排序在其组中:
order by
case when currency in ('USD', 'CAD')
then '000'||currency
when currency in ('ZWD', 'HTG')
then 'ZZZ'||currency
else currency
end
Run Code Online (Sandbox Code Playgroud)
这将使USD和CAD位于列表的顶部(已排序),ZWD和HTG位于底部,其余部分在这些之间进行排序.
| 归档时间: |
|
| 查看次数: |
69443 次 |
| 最近记录: |