1

我正在使用 MS Access。

我想创建一个 IIF 表达式,如果 A 列为空,则使用 B 列。如果 B 列为空,请使用 C 列。

到目前为止我已经得到了这个,它似乎不起作用

IIf(IsNull([DataTable]![State1]),[DataTable]![State2],
IIf(IsNull([DataTable]![State2]),[DataTable]![State3],
IIf(IsNull([DataTable]![State3]),[DataTable]![State4])))

我不是 Access 的高级用户,我不确定为什么这对我不起作用。

4

1 回答 1

1

您可以使用Switch Function来表达您想要的逻辑。

这是下面查询的输出。前 5 列包含在DataTable中,最后一列由Switch表达式生成。

id State1 State2 State3 State4 computed_column
-- ------ ------ ------ ------ ---------------
 1                           a               a
 2                    b                      b
 3             c                             c
 4      d                                    d
 5                                    all Null

SELECT
    d.id,
    d.State1,
    d.State2,
    d.State3,
    d.State4,
    Switch(
        d.State1 Is Not Null, d.State1,
        d.State2 Is Not Null, d.State2,
        d.State3 Is Not Null, d.State3,
        d.State4 Is Not Null, d.State4,
        True, 'all Null'
    ) AS computed_column
FROM DataTable AS d;

或者,如果您将从 Access 会话中运行查询,则可以使用嵌套的Nz Functions。此查询产生与上述相同的结果。

SELECT
    d.id,
    d.State1,
    d.State2,
    d.State3,
    d.State4,
    Nz(d.State1,
        Nz(d.State2,
        Nz(d.State3,
        Nz(d.State4,
        'all Null')))
    ) AS computed_column
FROM DataTable AS d;
于 2015-02-18T02:46:41.277 回答