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

跨Allocations与InventoryAdjustLog表对同类Item求和的SQL查询需求

解决方法:关联两张表的物料汇总数据

没问题,我来帮你搞定这个SQL查询需求~我们的目标是把Allocations表的预估物料量、InventoryAdjustLog表的实际使用量,按相同物料(item)分别求和后对应展示,还要确保所有出现过的物料都能被包含进来。

步骤1:分别对两张表按物料分组求和

首先,我们需要单独计算每张表中每个物料的总量:

  • 对Allocations表,按item分组,求和amount得到预估总量:
SELECT item, SUM(amount) AS total_allocated
FROM Allocations
GROUP BY item
  • 对InventoryAdjustLog表,按item分组,求和usage得到实际使用总量:
SELECT item, SUM(usage) AS total_used
FROM InventoryAdjustLog
GROUP BY item

步骤2:关联两个汇总结果

接下来要把这两个结果通过item关联起来。这里推荐用FULL OUTER JOIN,这样就算某个物料只在其中一张表存在(比如只有预估没有实际使用,或者反过来),也能被展示出来,不会遗漏。

标准SQL版本(支持FULL OUTER JOIN的数据库:PostgreSQL、SQL Server等)

SELECT 
    -- 取两个表中存在的item,避免NULL
    COALESCE(a.item, l.item) AS item,
    -- 把NULL替换为0,让结果更直观
    COALESCE(a.total_allocated, 0) AS total_allocated,
    COALESCE(l.total_used, 0) AS total_used
FROM (
    SELECT item, SUM(amount) AS total_allocated
    FROM Allocations
    GROUP BY item
) a
FULL OUTER JOIN (
    SELECT item, SUM(usage) AS total_used
    FROM InventoryAdjustLog
    GROUP BY item
) l ON a.item = l.item

MySQL替代方案(MySQL不支持FULL OUTER JOIN)

如果用的是MySQL,可以用UNION ALL合并两个分组结果后再汇总:

SELECT 
    item,
    SUM(total_allocated) AS total_allocated,
    SUM(total_used) AS total_used
FROM (
    -- 先把Allocations的汇总结果拼进来,实际使用量设为0
    SELECT item, SUM(amount) AS total_allocated, 0 AS total_used
    FROM Allocations
    GROUP BY item
    UNION ALL
    -- 再把InventoryAdjustLog的汇总结果拼进来,预估量设为0
    SELECT item, 0 AS total_allocated, SUM(usage) AS total_used
    FROM InventoryAdjustLog
    GROUP BY item
) combined
GROUP BY item

验证示例数据结果

用你给出的测试数据运行以上查询,会得到如下符合预期的结果:

itemtotal_allocatedtotal_used
item18075
item22015

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:47:34