微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Access 查询中获取重复记录 查询目的

如何解决在 Access 查询中获取重复记录 查询目的

我有三个表:[库存快照] 表显示了产品的名称以及我们在现场的数量; [入站负载]表显示有多少进入; [出站路线]表列出了有多少人出站。

当我只有第一个和第二个表(显示在手和“到达”)时,我得到了唯一值,但是当我在第三个表中添加时,我开始得到多条记录而不是汇总记录。

查询目的

我在仓库工作,我正在尝试隔离 1) 库存不足的拣货槽; 2)没有更多的产品进来; 3) 我想知道是否有未结订单可以发货任何剩余产品。

SELECT disTINCT [inventory snapshot].locn_brcd,[inventory snapshot].description,[inventory snapshot].item_name,Sum([inventory snapshot].on_hand_qty) AS SumOfON_HAND_QTY,Sum([outbound routes].quantity)       AS SumOfQuantity
FROM   [outbound routes]
       RIGHT JOIN ([inbound loads]
                   RIGHT JOIN [inventory snapshot]
                           ON [inbound loads].[wrin number] =
                              [inventory snapshot].item_name)
               ON [outbound routes].[wrin number] =
                  [inventory snapshot].item_name
GROUP  BY [inventory snapshot].locn_brcd,[inbound loads].[quantity to receive]
HAVING ( ( ( Sum([inventory snapshot].on_hand_qty) ) < 10 )
         AND ( ( [inbound loads].[quantity to receive] ) IS NULL ) ); 

解决方法

既然您解决了问题,请考虑进一步调整分组列。现在,GROUP BY 子句比 SELECT 子句多包含一个字段,即:[inbound loads].[quantity to receive]

通常,在这样的聚合 SQL 查询中,诸如数量之类的数值不会分组,而是作为聚合列运行。您可能已将它添加到 GROUP BY 以便在 HAVING 中使用它。但是,可以在 WHERE 中处理非聚合以在聚合之前进行过滤。 (奇怪的是,MS Access 倾向于使用查询设计在 HAVING 中移动这种级别过滤。)

考虑下面使用表别名来避免重复长表名的重构 SQL。当然,删除不必要的位置分组。

SELECT s.locn_brcd,s.description,s.item_name,SUM(s.on_hand_qty) AS SumOfON_HAND_QTY,SUM(r.quantity) AS SumOfQuantity
FROM   [outbound routes] r
       RIGHT JOIN ([inbound loads] l
                   RIGHT JOIN [inventory snapshot] s
                           ON l.[wrin number] = s.item_name)
               ON r.[wrin number] = s.item_name
WHERE l.[quantity to receive] IS NULL
GROUP  BY s.locn_brcd,s.item_name
HAVING SUM(s.on_hand_qty) < 10 ;

顺便说一下,SQL 行业倾向于使用 LEFT JOIN 而不是 RIGHT JOIN 来提高可读性,您可能无法控制,因为此查询可能是从 Query Design 输出的。在 Access SQL 中需要括号的地方尝试不嵌套 JOIN 的等效版本:

FROM ([inventory snapshot] s 
LEFT JOIN ([inbound loads] l
   ON l.[wrin number] = s.item_name)
LEFT JOIN [outbound routes] r
   ON r.[wrin number] = s.item_name

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。