我需要在Microsoft Access 2010上工作一些幫助。我有一種情況,其中我有一個帶有所有ID和英文名稱的主表以及具有另一種語言的ID和名稱的七個子表。需要注意的是,七個子表總和中的條目總數可能與主表不匹配。可能更少。在MS Access 2010中使用Nz()進行有限嵌套?
我試圖創建查詢,顯示ID和要麼名稱在外語,或者如果不存在,然後顯示英文名稱。
最初我想使用COALESCE,但後來我意識到這不是由MS Access支持。
我已經採取了兩種不同的方法 - 首先是一個INNER JOIN:
M.SID, A.ForeignName
FROM Master M INNER JOIN Class_A A ON M.SID = A.SID
UNION M.SID, A.ForeignName
FROM Master M INNER JOIN Class_B B ON M.SID = B.SID
UNION M.SID, A.ForeignName
FROM Master M INNER JOIN Class_C C ON M.SID = C.SID
...
但我不能捕獲主的所有記錄,不能想辦法選擇不上任何存在的所有記錄A類,B,C等,所以我決定嘗試使用NZ()代替:
SELECT M.SID,
Nz(
(SELECT ForeignName FROM Class_A A WHERE M.SID = A.SID),
Nz(
(SELECT ForeignName FROM Class_B B WHERE M.SID = B.SID),
Nz(
(SELECT ForeignName FROM Class_C C WHERE M.SID = C.SID),
EnglishName
)
)
)
FROM Master M
它完美,只要我停在B類,但超越導致錯誤:
At most one record can be returned by this subquery.
我也試過使用SWITCH,但它似乎不支持子查詢。
如果您使用您期望的值單獨運行這些查詢,是否有任何查詢返回多個值? 'Nz'只有在返回的'ForeignName'只返回一行或NULL時纔有效。 – Ash
難道你不能只用'IsFull'來嵌套'IIF'嗎?就像@AshwinNair所說的,你在表C中有重複的值,或者Nz採用「C」子選擇並將其添加到「B」。 – Jeroen