2011-06-02 130 views
3

我需要访问,所有的缩写相关的值来创建一个查找表,如果缩写(在主表)为空,然后我想显示“未知”访问查找表

我得到了值的工作,但我似乎无法得到空值显示。

我的查找表是这样的:

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

但是当我被要求做一个数,那只能说明我和d值,所有虽然我知道里面还有一些空白以及。

我在做什么错?

回答

3

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

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

然后,在tblMain中,将REQUEST字段更改为Required = True和Default Value =“U”。当添加新记录时,除非用户将其更改为A或D,否则它们将具有U.

然后,在REQUEST上连接2个表的查询应该会得到您想要的结果。

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

还应该创建2和表之间的关系,然后选择执行,以防止所述用户添加一个杂散值,如“X”为REQUEST参照完整性的选项。

编辑: 如果改变tblMain结构是假表,如果你从一个访问会话中执行此操作,您可以使用NZ()函数在一个LEFT JOIN。

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值JOIN。然而,随着“未知”行我建议tblLookup,你可以使用JOIN,其中包括NZ在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_TEXT =未知,我想你可以使用Nz在JOIN表达式的两边。然而,加入Nulls的整个想法让我感到畏缩。我会修改表格。

+1

我不能改变tblMain中的任何东西,有没有办法创建一个tblLookup给所有空值的Unknown? – 2011-06-02 15:24:16