3

Access(またはJet)でOracleのdecode()に相当するものはありますか?

私が直面している問題は、基本的にステータスと日付 (すべてのレコードのステータス = 2) に基づいて結果セットをソート (順序付け) する必要があることです。

Oracleでは、次のようになります

select
  ...
from
  ...
where
  ..
order by
  decode(status, 2, 0, 1),
  date_column
4

4 に答える 4

6

最も近いアナロジーは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()関数を使用する必要があります。

于 2009-11-19T14:46:25.117 に答える
1

IIFで試すことができます。このスタックオーバーフローの質問を参照してください。

于 2009-11-19T13:22:22.040 に答える
0

SWITCH次の関数を使用できます。

LABEL: Switch(
   [TABLE_NAME]![COL_NAME]='VAL1';'NEW_VAL1';
   [TABLE_NAME]![COL_NAME]='VAL2';'NEW_VAL2';
)

コンマではなくセミコロンに注意してください。

上記の例は、MS Access 2010 のクエリで機能します。

于 2016-04-27T14:11:03.470 に答える
0

切り替えや選択に例えられるのではないかと思います。

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

于 2009-11-19T13:36:04.540 に答える