You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:如何将同一提单的多条商品记录合并并汇总数据

解决提单数据汇总问题

嘿,我一眼就看出你当前查询的问题啦——你把i.Weight和i.Pieces放进了GROUP BY子句里,这会让每条商品记录都单独成组,自然没法实现“一个提单一行”的汇总效果。

正确的查询思路

你需要用聚合函数对每个提单下的件数和重量做求和,同时只按提单的唯一标识及其他不需要聚合的字段分组。因为左连接可能会碰到没有对应商品记录的提单,所以最好用COALESCE把NULL值转换成0,避免结果显示为NULL。

修正后的SQL语句

SELECT 
    b.BillOfLadingNumber,
    b.ShipFromCity,
    b.ShipFromState,
    b.ShipFromZip,
    b.DeliveryDate,
    b.ShipToCity,
    b.ShipToState,
    b.ShipToZip,
    COALESCE(SUM(i.Weight), 0) AS TotalWeight,
    COALESCE(SUM(i.Pieces), 0) AS TotalPieces,
    b.Id
FROM vw_BillsOfLading b
LEFT OUTER JOIN vw_Items i ON i.TransactionId = b.Id
WHERE b.BillOfLadingNumber IN ('100277','100310','100814','100867','101118','101124','101530','101630','101657','101694','101760','102153','102241','102276','102284')
GROUP BY 
    b.Id,
    b.BillOfLadingNumber,
    b.ShipFromCity,
    b.ShipFromState,
    b.ShipFromZip,
    b.DeliveryDate,
    b.ShipToCity,
    b.ShipToState,
    b.ShipToZip

关键改动说明

  • 用SUM(i.Weight)和SUM(i.Pieces)替代直接选择i.Weight和i.Pieces,实现同提单下的数值汇总
  • 加入COALESCE函数:当某个提单没有对应商品记录时,左连接返回的i.Weight和i.Pieces会是NULL,COALESCE能把这些NULL转换成0,让结果更直观
  • 从GROUP BY中移除了i.Weight、i.Pieces和i.TransactionId,只保留提单表(vw_BillsOfLading)的字段——因为b.Id是提单的唯一标识,只要按它分组,就能保证每个提单只返回一行结果

如果你的SQL数据库支持函数依赖(比如PostgreSQL、MySQL关闭ONLY_FULL_GROUP_BY模式),其实GROUP BY只需要写b.Id就够了,其他提单字段会自动关联到唯一的b.Id,不过为了兼容性,把所有非聚合字段都放进GROUP BY是最稳妥的做法。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:16:47