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

库存管理系统中多表内连接按日期查询实时库存的SQL实现

按日期查询实时库存的解决方案

嘿,我来帮你搞定这个库存查询需求!要从这三张表中按日期算出实时库存(Stock in Hand),核心思路是先统计指定日期内各产品的总销量,再结合产品的初始库存计算剩余量(这里得提一句:你的Productmastertb表结构里没包含初始库存字段,我默认这个表有个Initial_Stock字段存产品初始库存,如果实际情况不一样,你直接替换成对应的字段就行)。

最终SQL查询语句

SELECT 
    pm.prod_id AS `Product ID`,
    pm.Product_name AS `Product Name`,
    -- 用初始库存减去累计销量,COALESCE处理无销售记录的情况
    (pm.Initial_Stock - COALESCE(SUM(sd.Prod_qty), 0)) AS `Qty`
FROM 
    Productmastertb pm
-- 左连接销售明细表,确保没卖过的产品也能显示
LEFT JOIN 
    salesdetailstb sd ON pm.prod_id = sd.Prod_id
-- 再连接销售主表,过滤日期
LEFT JOIN 
    salestb s ON sd.billno = s.billno
-- 这里替换成你要查询的目标日期,比如'2024-05-20'
WHERE 
    s.billdate <= '你的目标日期'
-- 按产品分组,计算累计销量
GROUP BY 
    pm.prod_id, pm.Product_name, pm.Initial_Stock
ORDER BY 
    pm.prod_id;

关键细节解释

  • LEFT JOIN的作用:就算某个产品从来没卖过,也会出现在结果里,这时候销量是0,剩余库存就等于初始库存。
  • COALESCE函数:避免没销售记录的产品出现NULL值,把SUM(sd.Prod_qty)的结果转为0,这样计算出来的库存才是正确的数字。
  • WHERE过滤日期:只统计目标日期及之前的销售数据,这样得到的就是截止到该日期的实时库存。

如果你的Productmastertb确实没有初始库存字段,那可能需要补充进货相关的表,或者调整需求(比如只统计到指定日期的销量)。不过根据你给出的示例结果,我默认是需要计算剩余库存的情况。

示例输出(和你期望的格式一致)

Product IDProduct NameQty
1Mouse10
2Keyboard60
3Headphone30

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

火山引擎 最新活动