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

Oracle按交易类型求和与减法运算,实现商品库存结存查询

Oracle店铺库存结存量计算方案

嘿,我来帮你搞定这个库存计算的问题!首先咱们先明确下交易表的常见结构(如果你的表字段不一样,直接替换对应字段名就行):

假设你的交易表叫store_transactions,包含以下核心字段:

  • product_id:商品唯一标识
  • transaction_type:交易类型,值为MR(入库)或SR(出库)
  • quantity:交易的商品数量(默认是正数,入库加、出库减)

核心计算逻辑

最终库存的本质就是所有入库数量总和减去所有出库数量总和,用Oracle的聚合函数结合条件判断就能轻松实现,具体SQL如下:

SELECT
    product_id,
    SUM(CASE 
        WHEN transaction_type = 'MR' THEN quantity 
        WHEN transaction_type = 'SR' THEN -quantity 
        ELSE 0 
    END) AS final_stock
FROM
    store_transactions
GROUP BY
    product_id
ORDER BY
    product_id;

扩展:包含初始库存的场景

如果你还有一张商品基础信息表(比如products),里面存了每个商品的初始库存initial_stock,可以关联两张表计算最终库存:

SELECT
    p.product_id,
    p.product_name, -- 如果有商品名称字段可加上
    p.initial_stock + COALESCE(t.transaction_total, 0) AS final_stock
FROM
    products p
LEFT JOIN (
    SELECT
        product_id,
        SUM(CASE 
            WHEN transaction_type = 'MR' THEN quantity 
            WHEN transaction_type = 'SR' THEN -quantity 
            ELSE 0 
        END) AS transaction_total
    FROM
        store_transactions
    GROUP BY
        product_id
) t ON p.product_id = t.product_id
ORDER BY
    p.product_id;

这里用COALESCE()是为了处理那些没有任何交易记录的商品,避免初始库存因为NULL值变成无效结果。

几个注意点

  • 如果你的出库记录里quantity存的是负数,直接把CASE里的-quantity改成quantity即可
  • 要过滤特定时间范围的交易?在主查询或子查询里加WHERE transaction_date BETWEEN '起始日期' AND '结束日期'就行(假设你有transaction_date字段)
  • 有其他交易类型的话,要么在CASE里补充对应逻辑,要么用ELSE 0忽略不相关类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:51