日期:2014-05-16  浏览次数:20876 次

如何统计各仓库的分库存
有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.产品编号;