如何解决在 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 举报,一经查实,本站将立刻删除。