SQL查询:如何按PACKLIST_ID分组汇总CUST_ORDER_ID的TOTAL值
按PACKLIST_ID和CUST_ORDER_ID汇总订单总额
原查询返回的是发货明细行,所以同一PACKLIST_ID下会有多个CUST_ORDER_ID的TOTAL记录。要实现按PACKLIST_ID分组,同时汇总同一PACKLIST_ID下相同CUST_ORDER_ID的总额,且不同PACKLIST_ID的相同CUST_ORDER_ID分开统计,只需要修改查询为分组汇总形式:
修改后的SQL语句
--10/24/24 - 按PACKLIST_ID和CUST_ORDER_ID汇总发货总额 SELECT DBO.SHIPPER.PACKLIST_ID, MIN(dbo.shipper.SHIPPED_DATE) AS SHIPPED_DATE, -- 同一PACKLIST_ID的发货日期通常一致,用MIN/MAX都可 DBO.SHIPPER.CUST_ORDER_ID, SUM(dbo.SHIPPER_LINE.SHIPPED_QTY) AS TOTAL_SHIPPED_QTY, -- 可选:汇总该分组下的总发货数量 SUM(dbo.SHIPPER_LINE.SHIPPED_QTY * dbo.SHIPPER_LINE.UNIT_PRICE) AS TOTAL_AMOUNT FROM DBO.SHIPPER INNER JOIN dbo.SHIPPER_LINE ON dbo.SHIPPER.PACKLIST_ID = dbo.SHIPPER_LINE.PACKLIST_ID WHERE dbo.shipper.SHIPPED_DATE BETWEEN DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) AND DATEADD(m, DATEDIFF(m, -1, GETDATE()), 0) GROUP BY DBO.SHIPPER.PACKLIST_ID, DBO.SHIPPER.CUST_ORDER_ID -- 核心:同时按两个字段分组,确保不同PACKLIST_ID的同CUST_ORDER_ID分开统计 ORDER BY MIN(dbo.shipper.SHIPPED_DATE)
关键说明
- 分组依据:必须同时指定
PACKLIST_ID和CUST_ORDER_ID作为分组键,这样即使不同PACKLIST_ID存在相同的CUST_ORDER_ID,也会被当作独立分组分别计算总额。 - 汇总逻辑:用
SUM()函数对明细行的金额和数量做汇总;发货日期用MIN()或MAX()是因为同一PACKLIST_ID的发货日期通常统一,若业务上能保证该日期唯一,也可以直接将SHIPPED_DATE加入GROUP BY子句。 - 保留了原查询的时间过滤条件,确保只统计当月的发货数据。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

