【问题标题】:Issues with query using Having clause in AccessAccess中使用Having子句的查询问题
【发布时间】:2011-07-12 16:45:35
【问题描述】:

我在获取在 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' And (boq.PIPE_AG In (-1,1) Or boq.PIPE_UG In (-1,1))' as聚合函数的一部分。

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

【问题讨论】:

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


【解决方案1】:

使用 WHERE 子句代替 HAVING。您应该仅将 HAVING 与聚合函数一起使用。 例如,您可以使用

HAVING Sum(boq.Quantity) > 1000 

应该这样做

【讨论】:

  • 我猜你的意思是 HAVING 可以与 GROUP BY 一起使用(不仅仅是聚合函数)。可以使用 HAVING 按列分组
【解决方案2】:

您使用什么版本的 MS Access?我刚刚在我的 Access 2007 副本中复制了您的确切表/查询,它工作得非常好(如预期的那样)。我假设你所有的列都是数字类型(长)和管道列是文本

【讨论】:

  • 访问2007,表total - boq其实是查询,但数据类型如你所说。
  • 当我从查询中创建表格时它确实有效。不知道这告诉我什么,但我想这是向前迈出的一步。
  • 对不起,伙计。它可以在我的 Access 中使用表或查询。尝试重新创建查询。
  • 经过一些测试,我发现这是因为管道列是我查询中的计算列。我尝试在查询columnTest: "A" 中创建一些简单的列,然后将columnTest="A" 添加到它失败的have 子句中。显然,它似乎是计算列,不能在have子句中使用。
  • @xecaps12 谢谢!我对你的问题投了赞成票,因为你的决议将来会为我服务
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多