Ms access 访问查询:总数排名前1的是我的总数翻倍

Ms access 访问查询:总数排名前1的是我的总数翻倍,ms-access,group-by,Ms Access,Group By,当我在MS ACCESS中仅从一个表运行这个非常简单的查询时,它将我的SUM列加倍 SELECT TOP 1 data.Item, reference.[Proposed New Category] AS Type, Sum(data.[Qty Sold]) AS [Nbr Sold] FROM data INNER JOIN reference ON data.Item = reference.[Item Name] WHERE

当我在MS ACCESS中仅从一个表运行这个非常简单的查询时,它将我的SUM列加倍

SELECT TOP 1 
    data.Item, 
    reference.[Proposed New Category] AS Type, 
    Sum(data.[Qty Sold]) AS [Nbr Sold]
FROM 
    data 
INNER JOIN 
    reference 
ON 
    data.Item = reference.[Item Name]
WHERE 
    data.[Month Date] = [type the 1st of the month you want - like for Aug 2013, type 8/1/2013]
GROUP BY 
    data.Item, reference.[Proposed New Category]
ORDER BY 
    Sum(data.[Qty Sold]) DESC;
是的,我已经看到了这两个,所以请不要仅仅通过引用它们来扰乱这个思路,除非它是为了建设性地解释它们为什么实际适用。他们都没有提到我的情况(一个是自连接,另一个也是关于连接的-我没有自连接)



为什么在我的查询中会固有这种双重化,我如何避免它??我只想按销售数量降序排列前一项……听起来很简单。我想避免做一堆典型的“访问垃圾”,如生成表查询等,有什么办法可以解决吗?

可能导致这种情况的一个原因是,如果连接实际上是针对多对多关系,而不是预期的一对多关系,在这种情况下,
内部联接
将返回两个表的多个交集,即使“交集”的感觉很弱。您加入文本字段的事实让我倍感怀疑-想必
[Item Name]
不是
reference
的主键吧?检验这一假设的一种方法是修改查询以强制建立一对多关系:

SELECT TOP 1 data.Item, r2.[Proposed New Category] AS Type, Sum(data.[Qty Sold]) AS [Nbr Sold]
FROM data
INNER JOIN (
    SELECT reference.[Item Name], FIRST(reference.[Proposed New Category]) 
    FROM reference
    GROUP BY reference.[Item Name]) r2
ON d2.item = r2.[Item Name]
WHERE (((d2.[Month Date])=[type the 1st of the month you want - like for Aug 2013, type 8/1/2013]))
GROUP BY d2.Item, r2.[Proposed New Category]
ORDER BY Sum(d2.[Qty Sold]) DESC;

如果出现预期值,则需要修复
reference
以删除重复条目。如果还没有主键的话,我还建议添加一个合适的主键(“Item Name”听起来不太像主键,而“ItemCode”或“ItemID”听起来像主键),并与
数据建立关系?这可能有助于我们了解您想要什么。因为查询可能不正确/可能不是最好的使用方法。所以请你更新你的帖子好吗?我同意@PaulFrancis的观点-你需要从两个表中提供一个小样本数据来说明这个问题。(是的,您的查询来自两个表,而不是“一个表”。)