通貨に基づいて取引を注文する必要があります。ただし、カスタム注文を実装する必要があります。これにより、USDが常に一番上になり、残りは昇順で注文する必要があります。
例えば :
- BHT
- 米ドル
- MYR
- JYP
次のように並べ替える必要があります:
- 米ドル
- BHT
- 日本円
- MYR
これを処理する簡単な方法はありますか?
通貨に基づいて取引を注文する必要があります。ただし、カスタム注文を実装する必要があります。これにより、USDが常に一番上になり、残りは昇順で注文する必要があります。
例えば :
次のように並べ替える必要があります:
これを処理する簡単な方法はありますか?
これが単純であるかどうかわからない:
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'
こともできます)。
ソートが「柔軟」であり、すべての通貨で機能することを確認するには、次のようにします。
SELECT <columns>
FROM <tableName>
ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn
特定の値を最初または最後に並べ替えるのに興味があるが、それらをグループに並べ替える場合の、これを行うためのより詳細な方法:
order by
case when currency in ('USD', 'CAD')
then '000'||currency
when currency in ('ZWD', 'HTG')
then 'ZZZ'||currency
else currency
end
これにより、USDとCADがリストの一番上(並べ替え)に配置され、ZWDとHTGが一番下に配置され、残りはそれらの間で並べ替えられます。
多分これはあなたを助けるでしょう:
order by decode(currency, 'USD', 1, 2)
または使用case
order by
case
when currency = 'USD' then 1
else 2
end
FIELD()
MySQLの正規表現のような関数を持つもう1つのバリアント:
select
meas_code,
to_number(regexp_replace(meas_code, replace('(meas1,meas2,meas3)', ',', '|'), instr(replace('(meas1,meas2,meas3)', ',', '|'), meas_code))) ordr
from (select cast(column_value as varchar2(10)) as meas_code from xmltable('''meas1'',''meas2'',''meas3'''))
order by 2
次のことができます。
SELECT
*
FROM
yourtable
ORDER BY
REPLACE(FIND_IN_SET(currency,'USD,BHT,JPY,MYR'),0,'Z')
私は同じことをする必要がありましたが、複数の列があり、Grzegorz Wの答えがこれに最適であり、次の簡単な追加があります。
SELECT <columns>
FROM <tableName>
ORDER BY DECODE(currencyColumn,'USD', 1, 2), currencyColumn, anotherColumn;