2017-09-06 10 views
0

WHERE句にクエリ式を渡すときに問題が発生しました。 Accessは新しい列(式)の名前を取得せず、その値の全体を表示します。簡略化されたクエリは以下のとおりです。WHERE句のMS Accessクエリ式

WHERE句の2番目の部分には、[オフセット]列の名前が含まれていることがわかります。これは問題を引き起こしています。結果は、DateAdd/Offset値(DATE)が別のテーブルにある値よりも前にあるかどうかを確認する必要があります。どのようにこれを処理するための任意のアイデアですか?ありがとうございました!

編集:私は明示的に表現を入れようとしましたが、私は[LT]の値を求められます。 Accessがソーステーブルの列名以外の列名を認識しないようです。

編集:HAVINGはクエリ式エラーでデータ型が一致しません。ここで私が働いているものです:

SELECT po.Item, 
ist.SKU, 
po.[EX-FACTORY DATE], 
Min(lt.Intransit_LT) AS LT, 
po.Ship_Method 
FROM (((tbl_Item_PO AS po 
LEFT JOIN tbl_ItemSKUType AS ist ON po.item = ist.Item) 
LEFT JOIN Supplier_and_LT AS lt ON po.Supplier = lt.Supplier 
WHERE (((ist.SKU) Is Not Null) 
GROUP BY po.Item, ist.SKU, po.[EX-FACTORY DATE], po.[QTY PER SHIPMENT], po.WHSE, wh.Region, po.Ship_Method 
HAVING (DateAdd('d',MIN(lt.[Intransit_LT]),po.[EX-FACTORY DATE]))<(select top 1 AOD from tbl_Date) 
+0

明示的表現を与えるようにしてください: 'AND(DateAdd関数( 'D'、[LT]、PO [EX-FACTORYのDATE])<(からトップ1 AODを選択します。 tbl_Date))) 'を実行します。 'Offset'は多くのSQL方言(単にJET/Ace SQLではない)のキーワードなので、カラム名として使うのは避けるべきですが、あなたのエラーを引き起こしたのかどうかはわかりません。 –

+0

ありがとうございましたが、私も同じ問題でこれを試しました。式を明示的に使用すると、Accessは[LT]の値を求められます。理由は分かりませんか? – ddelpinal

+0

別の悪い習慣に気付きました。あなたはテーブルのために 'As lt'を使用しており、次にカラムの' As LT 'を使用しています。 SQLでは、通常、大文字小文字は無視されますが、エラーは発生しません。 –

答えて

1

あなたOffsetLTを含み、そしてLTMin集約式が含まれています。集計式はWHERE節では使用できません。HAVING節でのみ使用できます。

次のことを試してみてください。

SELECT po.Item, 
    ist.SKU, 
    po.[EX-FACTORY DATE], 
    Min(lt.Intransit_LT) AS LT, 
    DateAdd('d',[LT],po.[EX-FACTORY DATE]) AS Offset 

    FROM (tbl_Item_PO AS po 

    LEFT JOIN tbl_ItemSKUType AS ist ON po.item = ist.Item) 
    LEFT JOIN Supplier_and_LT AS lt ON po.Supplier = lt.Supplier 

    WHERE (ist.SKU Is Not Null) 

    GROUP BY po.Item, ist.SKU, po.[EX-FACTORY DATE], po.[QTY PER SHIPMENT], po.WHSE, wh.Region, po.Ship_Method 
    HAVING DateAdd('d',Min(lt.Intransit_LT),po.[EX-FACTORY DATE])<(select top 1 AOD from tbl_Date)) 
+0

HAVINGを使用しようとしましたが、値を入力するよう依頼されています。 – ddelpinal

+0

私のソリューションとGustavのソリューションを組み合わせてみましょう。編集 –

+0

を参照してください。近づいていると思いますが、クエリ式にデータ型の不一致があるというエラーが表示されます。編集を参照してください.. – ddelpinal

0

は、使用してみてください:

DateAdd('d',Min(lt.Intransit_LT),po.[EX-FACTORY DATE]) AS [Offset] 

... 

WHERE ((ist.SKU Is Not Null) 
AND DateAdd('d',Min(lt.Intransit_LT),po.[EX-FACTORY DATE])<(select top 1 AOD from tbl_Date))