WHERE子句中的MS Access查询表达式

时间:2017-09-06 19:36:54

标签: ms-access

我无法将查询表达式传递给WHERE子句。 Access不会获取新列(表达式)名称,并提示我输入整个值。简化的查询如下。

您会注意到WHERE子句的第二部分包含[Offset]列名,这就是导致我出现问题的原因。结果应检查DateAdd / Offset值(DATE)是否在另一个表中存在的值之前。关于如何处理这个问题的任何想法?谢谢!

  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) 
  AND ([Offset]<(select top 1 AOD from tbl_Date)))

  GROUP BY po.Item, ist.SKU, po.[EX-FACTORY DATE], po.[QTY PER SHIPMENT], po.WHSE, wh.Region, po.Ship_Method;

编辑:我试图明确地放入表达式但是我被提示输入[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)

2 个答案:

答案 0 :(得分:1)

您的Offset包括LTLT包含Min聚合表达式。聚合表达式不能在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))

答案 1 :(得分: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))