【发布时间】: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 子句时它会抱怨。
【问题讨论】:
-
使用 WHERE 子句代替 HAVING。您应该仅将 HAVING 与聚合函数一起使用。例如,您可以使用 HAVING Sum(boq.Quantity) > 1000 来执行此操作。
-
@THEn:应该是答案——如果你把它作为一个发布,我会赞成
-
我知道它可以使用 where,我只是想弄清楚为什么添加 pipe=1 会导致它失败。 pipe_ag 和 pipe_ug 也不是聚合函数。
-
如果您没有在查询中使用聚合函数(在这种情况下为 Sum),您可以在 having 子句中不使用聚合函数。
标签: sql ms-access ms-access-2007