如何通过GROUP BY按订单汇总计算总托盘数(SkidQty)?
按订单分组计算总托盘数的解决方案
核心思路
关联订单表与乘数表,按订单号分组,对每个订单下各产品的Qty/乘数值求和,得到每个订单的总托盘数。
示例SQL语句
假设表结构:
Order表:OrderNo(订单号)、Item(产品)、Qty(数量)、ShipDate(发货日期)Multipler表:Item(产品)、Multipler(托盘乘数)
SELECT o.OrderNo, -- 转换为小数类型避免整数除法截断,按需取整 ROUND(SUM(CAST(o.Qty AS DECIMAL(10,2)) / m.Multipler), 0) AS TotalPallets FROM [Order] o INNER JOIN Multipler m ON o.Item = m.Item -- 筛选特定发货日期 WHERE o.ShipDate = '2024-05-20' GROUP BY o.OrderNo ORDER BY o.OrderNo;
关键注意点
- 整数除法问题:如果
Qty和Multipler都是整数,直接除法会截断小数,需用CAST/CONVERT转换为小数类型后计算,再根据需求用ROUND取整。 - 关联重复问题:确保
Multipler表中每个Item只有唯一的乘数记录,若存在重复,需先去重(比如用SELECT DISTINCT Item, Multipler FROM Multipler作为子查询关联),否则会导致订单数据被重复计算。 - 分组逻辑:必须以
OrderNo作为分组依据,确保每个订单只返回一行汇总结果。
执行上述语句后,就能得到你需要的分组结果:比如订单10000总托盘数7,订单10001总托盘数10。
内容的提问来源于stack exchange,提问作者DanDu
相关产品推荐
相关产品推荐

