2017-07-03 11 views
0

クエリ内のIIF functionが#ERRORを返しています。次のように私のクエリは次のとおりです。一部はちょうど私が[TBL2] [真利用可能な数量]フィールド内のデータを持って知っているレコードでテストのために、このクエリを制限することです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")); 

ザ・。

究極の目標は、TBL1内のすべてのアイテムを返し、ない場合は、それが存在する場合TBL2から[True Available Quantity]値を使用して、TBL1からEvalInstockを使用することです。私は助言に感謝する!

+0

あなたは 'tbl1'と' tbl2'の定義といくつかのサンプルデータを表示することはできますか? – joanolo

+0

Tbl2です。[True Available Quantity]は文字列ですか? – Duston

+0

no tbl2。[真の利用可能な数量]は数字です。それはおそらくそれです。私はEvalInstockのデータ型を変更したり実際に見ることはできませんが、文字列であると信じています。私はクエリ内の文字列にtbl2。[真の利用可能な数量]をキャストできますか?おかげさまで、フィールドのデータ型を見落としてしまいました。 –

答えて

0

EvalInstockが文字列の場合、どちらのフィールドからの戻り値も自動的に文字列としてキャストされるため、[有効な数量]が数値でEvalInstockが文字列であれば問題ありません。私は確認のためのテストをしました。だから何かが間違っている。

[true available quantity]が数字タイプのフィールドの場合、空の文字列と比較できないので、その条件を削除します。

ItemCodeはテキストタイプのフィールドですか?そうでない場合は、引用符を削除します。

あなたがのIsNullを(使用する場合)も(NZを使用する場合があります):

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

、Nullの場合:Nz([True Available Quantity], [EvalInstock]) AS InStock レビューhttp://allenbrowne.com/QueryPerfIssue.html

+0

空の文字列との比較を削除しました。助けてくれてありがとう! –

0

あなたの問題は、VBAは、常に両方の条件をチェックしていること、最も可能性が高いです2番目の条件は比較できない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"; 
関連する問題