如何统计各仓库的分库存
有4个表
一个销售单表,字段如下(这个表的主键 销售单编号 是下个表的外键)
销售单编号 存放仓库
1 北仓
2 南仓
3 南仓
4 北仓
一个销售详情表,字段如下
销售单编号 产品编号 数量
1 0001 2
1 0002 4
2 0002 3
3 0001 2
4 0001 5
一个进货单表,字段如下(这个表的主键 进货单编号 是下个表的外键)
进货单编号 存放仓库
1 北仓
2 南仓
3 南仓
4 北仓
一个进货表,字段如下
进货单编号 产品编号 数量
1 0001 5
1 0002 8
2 0002 12
3 0001 6
4 0001 7
请问,如何根据以上数据统计出各仓库的各种产品的最后库存
------解决方案--------------------假设销售单表与进货单表一致
select a.进货单编号,a.存放仓库,b.产品编号,sum(b.数量)
from 进货单表 a left join
(select * from 进货表 union all select 销售单编号,产品编号,数量*(-1) from 销售详情表)
b
group by a.进货单编号,a.存放仓库
------解决方案----------------------用union all最简单
select T.存放仓库, T.产品编号,sum(num) as 库存数量
from (
SELECT a.存放仓库, b.产品编号, b.数量 as num
FROM 进货单表 AS a INNER JOIN 进货详情表 AS b ON a.进货单编号 = b.进货单编号
union all
SELECT C.存放仓库, d.产品编号, d.数量*(-1) AS num
FROM 销售单表 AS C INNER JOIN 销售详情表 AS d ON C.销售单编号 = d.销售单编号
) as T
GROUP BY T.存放仓库, T.产品编号;