首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问查询: TOP 1 with TOP 1 with my SUM加倍

访问查询: TOP 1 with TOP 1 with my SUM加倍
EN

Stack Overflow用户
提问于 2014-09-23 11:26:05
回答 1查看 155关注 0票数 0

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

代码语言:javascript
复制
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;

是的,这两个我都看过了,所以请不要仅仅通过引用它们来混淆这个帖子,除非它是为了建设性地解释为什么它们实际上是适用的。它们都没有解决我的情况(一个是自连接,另一个也是连接-我没有自连接)。

Cumulative totals being doubled

Access 2010 doubling the sum in query

为什么这在我的查询中是双重的,我如何避免它??我只想最上面的一个项目数量售出的descending...sounds如此简单。我想避免做一堆典型的“访问垃圾”,比如make table queries等,有什么方法可以绕过它吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-23 20:54:27

可能导致这种情况的一件事是,如果连接真的是针对多对多关系,而不是预期的一对多关系,在这种情况下,INNER JOIN将返回两个表的多个交集,即使是弱意义上的“交集”。你加入一个文本字段的事实让我加倍怀疑--大概[Item Name]不是reference的主键吧?检验这一假设的一种方法是修改查询以强制一对多关系:

代码语言:javascript
复制
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‘听起来会很像主键),并与data建立关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25986364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档