Access(またはJet)でOracleのdecode()に相当するものはありますか?
私が直面している問題は、基本的にステータスと日付 (すべてのレコードのステータス = 2) に基づいて結果セットをソート (順序付け) する必要があることです。
Oracleでは、次のようになります
select
...
from
...
where
..
order by
decode(status, 2, 0, 1),
date_column
最も近いアナロジーはSWITCH()
関数です。
オラクル:
SELECT supplier_name,
decode(supplier_id, 10000, 'IBM',
10001, 'Microsoft',
10002, 'Hewlett Packard',
'Gateway') result
FROM suppliers;
データベース エンジンへのアクセス
SELECT supplier_name,
SWITCH(supplier_id = 10000, 'IBM',
supplier_id = 10001, 'Microsoft',
supplier_id = 10002, 'Hewlett Packard',
TRUE, 'Gateway') AS result
FROM suppliers;
このSWITCH()
関数では、毎回完全な述語を指定する必要があるため、supplier_id のみを使用することに制限されないことに注意してください。デフォルト値については、それが TRUE であることが人間の読者に明らかな述語を使用します。たとえば、1 = 1
または実際には単にTRUE
:)
明らかではないかもしれませんが、SWITCH()
関数内のロジックが短絡しないということは、関数内のすべての式がエラーなしで評価されなければならないことを意味します。短絡するロジックが必要な場合は、ネストされたIIF()
関数を使用する必要があります。
IIFで試すことができます。このスタックオーバーフローの質問を参照してください。
SWITCH
次の関数を使用できます。
LABEL: Switch(
[TABLE_NAME]![COL_NAME]='VAL1';'NEW_VAL1';
[TABLE_NAME]![COL_NAME]='VAL2';'NEW_VAL2';
)
コンマではなくセミコロンに注意してください。
上記の例は、MS Access 2010 のクエリで機能します。
切り替えや選択に例えられるのではないかと思います。
Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])
-- http://office.microsoft.com/en-us/access/HA012289181033.aspx
Choose(index, choice-1[, choice-2, ... [, choice-n]])
-- http://msdn.microsoft.com/en-us/library/aa262690%28VS.60%29.aspx