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

按仓库汇总收发交易的库存余额报表:如何计算库存总计?

解决仓库库存总计计算问题

你的问题出在分组条件太冗余,当前GROUP BY里包含了TO_LOCN_ID、TO_LOCN_NAME、FROM_LOCN_ID、FROM_LOCN_NAME,这会导致同一个仓库因为收发方向不同被拆分成多条记录,无法直接得到该仓库的总计库存。

可以通过以下两种方式修改SQL:

方式一:先统一仓库标识,再按仓库汇总

先通过子查询把每条交易对应的仓库(入库取TO,出库取FROM)和对应的数量(入库为正,出库为负)整理好,再按仓库分组求和:

SELECT 
    ITEM_CODE,
    ANBAR,
    `Anbar Adı`,
    SUM(SUMTOT) AS 库存总计
FROM (
    SELECT 
        MOL.ITEM_CODE,
        CASE WHEN MOL.TO_LOCN_ID IS NOT NULL THEN MOL.TO_LOCN_ID ELSE MOL.FROM_LOCN_ID END AS ANBAR,
        CASE WHEN MOL.TO_LOCN_NAME IS NOT NULL THEN MOL.TO_LOCN_NAME ELSE MOL.FROM_LOCN_NAME END AS `Anbar Adı`,
        CASE WHEN MOL.TO_LOCN_ID IS NOT NULL THEN DEMAND_QTY ELSE -DEMAND_QTY END AS SUMTOT
    FROM AZP_MOL MOL 
    WHERE ITEM_CODE = '1010000003'
) t
GROUP BY ITEM_CODE, ANBAR, `Anbar Adı`
ORDER BY ANBAR ASC;

方式二:直接在主查询中按统一后的仓库字段分组

调整GROUP BY的字段,只保留统一后的仓库标识和名称,同时确保聚合函数正确计算:

SELECT 
    MOL.ITEM_CODE,
    CASE WHEN MOL.TO_LOCN_ID IS NOT NULL THEN MOL.TO_LOCN_ID ELSE MOL.FROM_LOCN_ID END AS ANBAR,
    CASE WHEN MOL.TO_LOCN_NAME IS NOT NULL THEN MOL.TO_LOCN_NAME ELSE MOL.FROM_LOCN_NAME END AS `Anbar Adı`,
    SUM(CASE WHEN MOL.TO_LOCN_ID IS NOT NULL THEN DEMAND_QTY ELSE -DEMAND_QTY END) AS 库存总计
FROM AZP_MOL MOL 
WHERE ITEM_CODE = '1010000003'
GROUP BY MOL.ITEM_CODE, 
         CASE WHEN MOL.TO_LOCN_ID IS NOT NULL THEN MOL.TO_LOCN_ID ELSE MOL.FROM_LOCN_ID END,
         CASE WHEN MOL.TO_LOCN_NAME IS NOT NULL THEN MOL.TO_LOCN_NAME ELSE MOL.FROM_LOCN_NAME END
ORDER BY ANBAR ASC;

两种方式都能把同一个仓库的所有收发交易汇总,得到最终的库存余额(比如你的'AA001TX'仓库会得到总计2的结果)。区别在于第一种可读性更强,第二种少一层子查询,性能差异不大,可根据实际情况选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:06:10