访问查询:有TOTALS的TOP 1是我的SUM的两倍



当我在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;

是的,我已经看到了这两个,所以请不要只是通过引用它们来打乱这个线程,除非它是为了建设性地解释为什么它们实际上是适用的。他们都没有谈到我的情况(一个是自我加入,另一个也是关于加入的——我没有自我加入)。

累计总数翻了一番
Access 2010使查询中的总和翻倍

为什么在我的查询中会出现这种双重性,我该如何避免??我只想要按销售数量降序排列的前一项。。。听起来很简单。我想避免做一些典型的"访问垃圾",比如做表查询等,有办法解决吗?

可能导致这种情况的一件事是,如果联接确实是针对多对多关系而不是预期的一对多关系,在这种情况下,INNER JOIN将返回两个表的多个交集,即使是微弱的"交集"。你加入一个文本字段的事实让我加倍怀疑——大概[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以删除重复条目。如果还没有合适的主键,我还建议添加一个合适的主键("项目名称"听起来不是特别的主键,而"项目代码"或"项目ID"会),并与data建立关系。

最新更新