我需要在Access中创建一个查找表,其中所有缩写都与一个值相关,如果缩写(在主表中)为null,那么我想显示“Unknown”
我得到了值,但我似乎无法显示空值。
我的查找表如下所示:
REQUEST REQUEST_TEXT
------------------------
A Approve
D Disapprove
NULL N/A
但是当我按要求进行计数时,它只显示A和D的值,尽管我知道那里也有一些空白。
我做错了什么?
答案 0 :(得分:3)
如果更改tblLookup,这应该会更容易。
REQUEST REQUEST_TEXT
------------------------
A Approve
D Disapprove
U Unknown
然后,在tblMain中,将REQUEST字段更改为Required = True,默认值=“U”。添加新记录时,除非用户将其更改为A或D,否则它们将具有U for 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保留为REQUEST_TEXT = Unknown的Null,我想你可以在JOIN表达式的两边使用Nz。然而,加入Nulls的整个想法让我感到畏缩。我会修改表格。