访问/喷射相当于Oracle的解码

Ren*_*ger 3 sql oracle ms-access jet

在Access(或Jet)中是否有等效的Oracle的decode().

我面临的问题是:我应该基于状态和日期(所有记录的状态= 2)在结尾处对结果集进行排序(排序).

在Oracle中,我会做类似的事情

select
  ...
from
  ...
where
  ..
order by
  decode(status, 2, 0, 1),
  date_column
Run Code Online (Sandbox Code Playgroud)

one*_*hen 6

最接近的类比是SWITCH()功能,例如

甲骨文:

SELECT supplier_name,
       decode(supplier_id,  10000, 'IBM',
                            10001, 'Microsoft',
                            10002, 'Hewlett Packard',
                                   'Gateway') result
  FROM suppliers;
Run Code Online (Sandbox Code Playgroud)

访问数据库引擎

SELECT supplier_name,
       SWITCH(supplier_id = 10000, 'IBM',
              supplier_id = 10001, 'Microsoft',
              supplier_id = 10002, 'Hewlett Packard',
              TRUE, 'Gateway') AS result
  FROM suppliers; 
Run Code Online (Sandbox Code Playgroud)

请注意,使用该SWITCH()功能时,您必须每次都提供完整谓词,因此您不必仅使用supplier_id.对于默认值,使用对于人类读者来说显而易见的谓词,例如1 = 1或者确实简单TRUE:)

可能不明显的一点是SWITCH()函数中的逻辑不会短路,这意味着必须能够无错误地评估函数中的每个表达式.如果您需要逻辑短路,那么您将需要使用嵌套IIF()函数.