示例说明:本示例是SqlServer数据库查询药品的进销存数据
1、表说明
Inigoodsstocks 期初库存表:存放使用系统之前的原有商品库存数量和金额,可以理解为结转库存
BillsDetail 单据明细表:存放各商品进销存明细数据(注意,我表里面出的数据存的是负数,入的存的是正数)
Store 库存表:存放各商品库存数量和金额
Commodity 商品表:存放商品资料数据
CommodityCode 商品编码表:存放商品编码,价格,单位等数据
Warehouse 仓库表:存放仓库资料数据
Suppliers 供应商表:存放供应商资料数据
2、注意事项
因为我BillsDetail单据明细表里面存放的有正负数(入:正数,出:负数),如果你存的都是正数,要自行处理一下:需把各出库数据转换成负数进行计算。期初时间是个固定日期时间,应根据自己的实际期初时间(期初库存结转日期时间)自行调整
3、sql代码
方式一:用WITH关键字将各数据先存临时表,然后再关联查询各临时表数据。
WITH
--先把各数据存到对应临时表,如下面的:qc AS (SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 期初数量,SUM(数量*含税价) AS 期初含税金额 FROM dbo.Inigoodsstocks),就是查出期初数据放到qc这个临时表里面
qc AS (SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 期初数量,SUM(含税金额) AS 期初含税金额 FROM dbo.Inigoodsstocks GROUP BY P_id,S_id,批号,Supplier_id),--期初数据汇总
sq AS ( --上期数据汇总
SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 上期数量,SUM(含税金额) AS 上期含税金额
FROM
(SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 数量,SUM(含税成本金额) AS 含税金额
FROM dbo.BillsDetail --各单据明细表
WHERE 单据类型 IN ('采购入库单','采购退货单','销售出库单','销售退货单','报损单','报溢单') AND 记账时间 < '2024-03-01 00:00:00' AND 记账时间 >= '2023-03-01 00:00:00' --注意:2024-03-01 00:00:00是开始时间,2023-03-01 00:00:00是期初时间,应根据你自己的期初时间自行调整
GROUP BY P_id,S_id,批号,Supplier_id
) sqSum
GROUP BY P_id,S_id,批号,Supplier_id
),
bq AS ( --本期数据汇总
SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 本期数量,SUM(含税金额) AS 本期含税金额
FROM
(SELECT P_id,S_id,批号,Supplier_id,SUM(数量) AS 数量,SUM(含税成本金额) AS 含税金额
FROM dbo.BillsDetail --各单据明细表
WHERE 单据类型 IN ('采购入库单','采购退货单','销售出库单','销售退货单','报损单','报溢单') AND 记账时间 BETWEEN '2024-03-01 00:00:00' AND '2024-12-31 23:59:59' --注意:2024-03-01 00:00:00是开始时间,2024-12-31 23:59:59是结束时间
GROUP BY P_id,S_id,批号,Supplier_id
) bqSum
GROUP BY P_id,S_id,批号,Supplier_id
),
--分别对本期各单据逐一进行数量和金额汇总
&

最低0.47元/天 解锁文章
3528

被折叠的 条评论
为什么被折叠?



