暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL中即时库存明细查询-再改进

数据管理idata 2021-04-23
408


现实中的数据关系是复杂的,只有理顺了其中关系理解了其中的逻辑,才会在更大可能上实现对数据的准确统计.


一 


如果视图不存在就创建,如果存在就修改:

CREATE or replace view view_name AS select_clause;
#原来创建的视图,如果查询语句有更改,需要使用到这个方法


二 


在原来查询的基础上添加以下查询语句:

UNION all
SELECT 日期,物料名称,规格型号,批号,round(调拨数量,2) as 调拨数量,验收,调入仓库 from `仓库调拨序时簿`
WHERE 调出仓库='辅料合格' and 调入仓库='试剂合格';
#因为仓管在工作上难免疏忽,有时会形成物料在仓库内部出现不应该出现的调拨数量,这个数量必须加以注意并调取出来,从而保证结果的准确




既然发现了现实数据中的特殊情况,尽管数据量少之又少,但为了结果的准确还是需要在实现过程中加以处理.

完整查询:

CREATE VIEW 订单 AS
SELECT 日期,单据编号,供应商,物料名称,规格型号,单位,sum(数量) as 数量 from `采购订单序时簿`
WHERE (`供应商` in (select 供应商 from `欠款` WHERE right(类别,1)='易'))
AND (`物料名称`,`规格型号`) in (SELECT 物料名称,规格型号 from `易制毒化学品目录`)
GROUP BY 日期,单据编号,供应商,物料名称,规格型号,单位;
#此视图对采购订单中的数量一列实现聚合操作,完成订单中单据编号的唯一性


CREATE or replace view 仓库调拨 AS
SELECT 日期, 物料名称,规格型号, 批号,round(调拨数量,2) as 调拨数量,验收,调入仓库 from `仓库调拨序时簿`
WHERE 调入仓库 not in ('辅料合格','试剂合格')
UNION all
SELECT 日期,物料名称,规格型号,批号,round(-调拨数量,2),验收,调入仓库 from `仓库调拨序时簿`
WHERE 调入仓库 in ('辅料合格','试剂合格')
UNION all
SELECT 日期,物料名称,规格型号,批号,round(调拨数量,2) as 调拨数量,验收,调入仓库 from `仓库调拨序时簿`
         WHERE 调出仓库='辅料合格' and 调入仓库='试剂合格';
#此视图对仓库调拨依据数据的现实意义进行分类操作


SELECT distinct 物料名称, 规格型号, 批号, 即时库存, 单位, curdate() as 统计日期
from (SELECT date(a.日期) as 订单日期,a.`单据编号`,a.供应商,a.物料名称,a.规格型号,a.数量,a.单位,
b.批号,b.实收数量,
c.`调拨数量`,c.`调入仓库`,c.`日期` as 出库日期,
ifnull(round(SUM(c.调拨数量)over(PARTITION by a.物料名称,b.批号),2),0)as 调拨总量,
round((`实收数量`-ifnull(SUM(调拨数量)over(PARTITION by 批号),0)),2) as 即时库存
FROM 订单 a
left JOIN `外购入库序时簿` b ON a.`单据编号` = b.`源单单号` and a.`供应商` = b.`供应商`
AND a.`物料名称` = b.`物料名称`
left JOIN 仓库调拨 c ON b.批号 = c.批号
ORDER BY 物料名称,批号) temp
where 即时库存>0;

文章转载自数据管理idata,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论