使用Access中的Having子句进行查询的问题

时间:2011-07-12 16:45:35

标签: sql ms-access ms-access-2007

我在获取查询以在MS Access 2007中运行时遇到一些问题。我有以下查询可以正常工作:

  SELECT boq.PIPE_AG, 
         boq.PIPE_UG, 
         boq.Pipe, 
         boq.Unit, 
         SUM(boq.Quantity) AS SumOfQuantity
    FROM [Total - BOQ] boq
GROUP BY boq.PIPE_AG, boq.PIPE_UG, boq.Pipe, boq.Unit
  HAVING boq.PIPE_AG In (-1,1) OR boq.PIPE_UG In (-1,1);

当我将 boq.Pipe ='1'添加到HAVING caluse时,如下所示:

HAVING boq.Pipe ='1' AND (boq.PIPE_AG In (-1,1) OR boq.PIPE_UG In (-1,1))

我收到错误消息:

  

您尝试执行的查询不包含指定的表达式'boq.Pipe ='1'和(boq.PIPE_AG In(-1,1)或boq.PIPE_UG In(-1,1))'as集合函数的一部分。

我为什么抱怨而感到有点困惑。我在查询的GROUP BY子句中确实有三个文件。如果我将其更改为使用WHERE子句,则查询可以正常工作,但是当我将管道字段添加到HAVING子句时,我正在尝试理解为什么它会抱怨。

2 个答案:

答案 0 :(得分:5)

使用WHERE子句而不是HAVING。您应该仅将HAVING用于聚合函数。 例如,您可以使用

HAVING Sum(boq.Quantity) > 1000 

应该这样做

答案 1 :(得分:3)

您使用的是什么版本的MS Access?我刚刚在我的Access 2007副本中复制了您的确切表/查询,它完全正常(如预期的那样)。我假设你的所有列都是Number类型(长)和Pipe列是Text