如果 A 列为空,则使用 B 列。如果 B 列为空,则使用 C 列

If column A is null then use column B. If column B is null then use column C

我正在使用 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 的高级用户,我不确定为什么这对我不起作用。

你可以用一个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;