3

我需要在 Access 中创建一个查找表,其中所有缩写都与一个值相关,如果缩写(在主表中)为空,那么我想显示“未知”

我得到了这些值,但我似乎无法让空值出现。

我的查找表如下所示:

REQUEST     REQUEST_TEXT
------------------------
A           Approve
D           Disapprove
NULL        N/A

但是当我按请求进行计数时,它只显示 A 和 D 的值,尽管我知道那里也有一些空白。

我究竟做错了什么?

4

1 回答 1

3

如果您更改 tblLookup,这应该会更容易。

REQUEST     REQUEST_TEXT
------------------------
A           Approve
D           Disapprove
U           Unknown

然后,在 tblMain 中,将 REQUEST 字段更改为 Required = True 和 Default Value = "U"。添加新记录时,除非用户将其更改为 A 或 D,否则它们将使用 U 表示 REQUEST。

然后,在 REQUEST 上加入 2 个表的查询应该可以得到我认为你想要的。

SELECT m.REQUEST, l.REQUEST_TEXT
FROM tblMain AS m
    INNER JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

您还应该在 2 个表之间创建关系,并选择强制参照完整性选项,以防止用户为 REQUEST 添加虚假值,例如“X”。

编辑:如果不考虑更改 tblMain 结构,并且您是在 Access 会话中执行此操作,则可以在 LEFT JOIN 上使用 Nz() 函数。

SELECT m.REQUEST, Nz(l.REQUEST_TEXT, "Unknown")
FROM tblMain AS m
    LEFT JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

如果您在 Access 会话之外执行此操作,例如从 ASP 中,则 Nz() 函数将不可用。因此,您可以用 IIf() 表达式替换 Nz()。

SELECT m.REQUEST, IIf(l.REQUEST_TEXT Is Null, "Unknown", l.REQUEST_TEXT)
FROM tblMain AS m
    LEFT JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

Edit2:您不能直接加入 Null 值。但是,对于 tblLookup,我建议使用“未知”行,您可以使用包含 Nz 的 JOIN 用于 tblMain.REQUEST

SELECT m.id, m.request, l.request_text
FROM tblMain AS m
    INNER JOIN tblLookup AS l
    ON Nz(m.request,"U") = l.request;

如果您想将 tblLookup REQUEST 保留为 Null for REQUEST_TEXT = Unknown,我想您可以在 JOIN 表达式的两侧使用 Nz。然而,加入 Nulls 的整个想法让我感到畏缩。我会修理桌子。

于 2011-06-02T15:17:38.020 回答