You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于多列判定SUM计算结果的技术问题咨询

解决基于物料备货标识的库存SUM计算问题

我完全懂你现在的困扰——要把物料主表的备货标识和库存异动表的数量结合起来,只统计符合备货要求的物料库存,确实容易在关联逻辑和过滤顺序上卡壳。咱们一步步拆解这个问题,给出实用的解决方法。

首先,先明确一下两张表的核心字段对应关系(我先给表起个通用名字,你可以根据实际表名替换):

  • 物料主表(比如叫material_master):包含location(仓库)、item_code(物料编码)、size_code(规格编码),以及备货标识字段(比如is_stocked,用1/0或Y/N标记是否需要备货)
  • 库存异动表(比如叫inventory_transactions):包含location(仓库)、item(物料编码,对应主表的item_code)、size(规格编码,对应主表的size_code),以及quantity_change(异动数量,正数入库、负数出库,求和后就是当前库存)

方法1:统计有异动记录的备货物料库存

如果只需要统计那些有过库存异动的备货物料,用INNER JOIN关联两张表,再过滤备货标识,最后分组求和:

SELECT
  mm.location,
  mm.item_code,
  mm.size_code,
  SUM(it.quantity_change) AS current_stock
FROM
  material_master mm
INNER JOIN
  inventory_transactions it
ON
  -- 确保仓库、物料、规格完全匹配,避免错误关联
  mm.location = it.location
  AND mm.item_code = it.item
  AND mm.size_code = it.size
WHERE
  mm.is_stocked = 1 -- 这里替换成你的备货标识取值,比如'Y'
GROUP BY
  mm.location,
  mm.item_code,
  mm.size_code;

方法2:统计所有备货物料(含无异动的0库存)

如果有些备货物料还没有任何异动记录(库存为0),想要把它们也显示出来,就用LEFT JOIN,再用COALESCE处理NULL值:

SELECT
  mm.location,
  mm.item_code,
  mm.size_code,
  -- 把没有异动的SUM(NULL)转换成0,更符合库存逻辑
  COALESCE(SUM(it.quantity_change), 0) AS current_stock
FROM
  material_master mm
LEFT JOIN
  inventory_transactions it
ON
  mm.location = it.location
  AND mm.item_code = it.item
  AND mm.size_code = it.size
WHERE
  mm.is_stocked = 1
GROUP BY
  mm.location,
  mm.item_code,
  mm.size_code;

几个关键注意点

  • 关联条件必须包含location、物料编码、规格编码三个字段,不然会出现不同仓库/规格的物料被错误关联的情况
  • 如果你的备货标识字段不是用1/0,而是用'Y'/'N'或者其他取值,记得修改WHERE子句里的条件
  • 如果需要筛选特定仓库,直接在WHERE里加mm.location = '你的仓库编码'即可

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

火山引擎 最新活动