2014-10-10 154 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子句中。