如果列A为null,则使用列B.如果列B为null,则使用列C.

时间:2015-02-18 02:08:49

标签: ms-access iif-function

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

1 个答案:

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