3

在 Access(或 Jet,就此而言)中是否有 Oracle 的 decode() 等效项。

我面临的问题是:我应该在最后根据状态和日期(所有记录的状态 = 2)对结果集进行排序(排序)。

在甲骨文我会去像

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()函数,您每次都必须提供完整的谓词,因此您不仅限于使用供应商 ID。对于默认值,请使用对人类读者来说很明显的谓词,例如它是 TRUE1 = 1或者实际上是简单的TRUE:)

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

于 2009-11-19T14:46:25.117 回答
1

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

于 2009-11-19T13:22:22.040 回答
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 回答
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 回答