2014-10-10 50 views
0

我想获得这样的查询MS Access查询聚集

SELECT sales.action_date, sales.item_id, items.item_name, 
     sales.item_quantity, sales.item_price, sales.net 
FROM sales INNER JOIN items ON sales.item_id = items.ID 
GROUP BY sales.item_id 
HAVING (((sales.action_date)=[Forms]![rep_frm]![Text13].[value])); 

每次我试图表明数据此消息显示

您的查询不包括指定表达式“行动日” 作为聚合函数的一部分。

和查询中的所有领域>>>但我只是想聚集是ITEM_ID

我应该怎么办?

+0

如果你要包括在SELECT语句中的所有字段需要有某种形式对他们聚集等领域。默认是GROUP BY。如果您使用一些示例和结果数据来编辑帖子;也许我们可以帮助你更好! – PaulFrancis 2014-10-10 13:27:33

回答

1

您在SELECT语句中没有像SUM那样的任何聚合。我也不明白你为什么sales.action_date在de HAVING子句中。这适用于汇总过滤,如SUM(sales.item_price)<> 0.应该可以将此部分放在WHERE子句中,而不是GROUP BY之前,而不是HAVING子句。 这个例子应该工作:

SELECT sales.item_id, items.item_name, SUM(sales.item_quantity), 
     SUM(sales.item_price), SUM(sales.net) 
FROM sales INNER JOIN items ON sales.item_id = items.ID 
WHERE sales.action_date=[Forms]![rep_frm]![Text13].[value] 
GROUP BY sales.item_id, items.item_name; 
+0

thaaanx iam没有注意到该字段中的sales.action_date非常感谢你 – user3574806 2014-10-10 13:43:09

1

当您对数据进行分组时,select查询中的所有字段应该包含在group by子句中,或者应该对其应用某些聚合函数 - 否则它不会造成混淆。

顺便说一句 - 我可以看到,你应该在组之前使用WHERE(((sales.action_date)=[Forms]![rep_frm]![Text13].[value])),而不是having之后。

+0

但以这种方式没有聚合发生! – user3574806 2014-10-10 13:29:49

+0

如果ID是唯一的,按ID分组将不会聚合任何内容。如果您希望按日期销售,则GROUP BY应仅包含日期,并且选择应包含要汇总的金额字段的日期和金额。 – 2014-10-10 13:33:21

+0

你能写信给我吗? – user3574806 2014-10-10 13:37:48

0

如果你想要聚合按日期,你必须把日期GROUP BY条款

SELECT sales.action_date, 
     SUM(sales.item_quantity), 
     SUM(sales.item_quantity * sales.item_price) as Total, 
     SUM(sales.net) 
FROM sales 
    INNER JOIN items ON sales.item_id = items.ID 
WHERE (((sales.action_date)=[Forms]![rep_frm]![Text13].[value])); 
GROUP BY sales.action_date 

只有你想按可出现GROUP BY子句中列英寸只有这些列可以出现在聚合函数之外的select子句中。