2017-07-03 46 views
0

當我知道我查詢的記錄符合條件時,我的查詢中的IIF function正在返回#ERROR。我的查詢如下:在ms訪問查詢中的IIF語句在測試null時返回#error

SELECT tbl1.ItemCode, IIf(IsNull([tbl2].[True Available Quantity]) Or 
[tbl2].[True Available Quantity]="",[tbl1].[EvalInstock],[tbl2].[True 
Available Quantity]) AS InStock 
FROM tbl1 LEFT JOIN tbl2 ON tbl1.ItemCode = tbl2.[Item No#] 
WHERE (((tbl1.ItemCode)="3003")); 

WHERE部分僅僅是限制這個查詢上我知道有在[TBL2] [真可用數量]字段中的數據記錄測試。

最終目標是返回tbl1中的所有項目,並使用tbl2中的[True Available Quantity]值(如果存在),如果不存在,則使用tbl1中的EvalInstock。我很感激任何建議!

+0

您可以顯示'tbl1'和'tbl2'的定義和一些示例數據? – joanolo

+0

是Tbl2。[True Available Quantity]一個字符串? – Duston

+0

no tbl2。[true available quantity]是一個數字。這可能是。我無法更改或真正看到EvalInstock的數據類型,但我相信它是一個字符串。我可以在查詢中將tbl2 [真實可用數量]轉換爲字符串嗎?謝謝,我完全忽略了考慮字段的數據類型! –

回答

0

如果[真實可用數量]是數字並且EvalInstock是字符串,則無關緊要,因爲如果EvalInstock是字符串,則來自任一字段的返回將自動轉換爲字符串。我做了一個測試來確認。所以別的是錯的。

如果[真實可用數量]是一個數字類型字段不能比較空字符串,所以刪除該條件。

ItemCode是文本類型字段嗎?如果沒有,請刪除引號。

如果使用ISNULL()還不如用NZ():Nz([True Available Quantity], [EvalInstock]) AS InStock 評論http://allenbrowne.com/QueryPerfIssue.html

+0

刪除與空字符串的比較做到了。謝謝您的幫助! –

0

您的問題是最有可能的,即VBA總是檢查兩個條件:

IsNull([tbl2].[True Available Quantity]) Or [tbl2].[True Available Quantity]="" 

因此,如果空,第二個條件也返回Null,這是無法比較的,然後IIf不知道該怎麼辦。

因此,與的Nz嘗試:

SELECT 
    tbl1.ItemCode, 
    Nz([tbl2].[True Available Quantity], [tbl1].[EvalInstock]) AS InStock 
FROM 
    tbl1 
LEFT JOIN 
    tbl2 
    ON tbl1.ItemCode = tbl2.[Item No#] 
WHERE 
    tbl1.ItemCode = "3003";