sql >> データベース >  >> RDS >> Oracle

OracleSQLのカスタムオーダー

    これが単純であるかどうかわからない:

    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)
    

    数値を使用して並べ替え順序を定義する上記のソリューションでは、大文字と小文字の区別/デコード式に記載されていない通貨が自動的に正しく並べ替えられません。

    単純にUSDを先頭に置き、残りを気にしないために、「生成された」注文基準も文字値である必要があります。その場合は、以下を使用できます。

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

    これは「アルファベット順」の順序を使用します。これは、文字が数字の後にソートされるために機能します。 ('AAA'を使用 '001'の代わりに 同様に機能します。



    1. Android-JobSchedulerのsetPeriodicは機能しません

    2. PostgreSQLでアイドル状態の接続を自動的に閉じる方法は?

    3. CTEを使用してSQLServerクエリ出力の欠落日を入力する

    4. beginとendを持つ2つのPLSQL文は、別々に正常に実行されますが、一緒に実行されませんか?