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

时间:2009-11-19 13:17:34

标签: sql oracle ms-access jet

在Access(或Jet)中是否存在Oracle的decode()等效内容。

我面临的问题是:我应该基本上基于排序(排序)结果集 最后一个状态和日期(所有记录的状态= 2)。

在Oracle中我会像

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

4 个答案:

答案 0 :(得分:5)

最接近的类比是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。对于默认值,使用一个对于人类读者来说显而易见的谓词,它是正确的,例如1 = 1或者只是TRUE:)

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

答案 1 :(得分:1)

您可以尝试使用IIF。请参阅this stackoverflow问题。

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用SWITCH功能:

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

注意分号而不是逗号。

上面的示例适用于MS Access 2010中的查询。