进销存月结表的SQL写法

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:42:54
我有如下二个表结构和数据:
进仓表:
进仓单号 款式 颜色 规格 数量 日期
10001 1111 红色 38 10 2009-10-10
10001 2222 红色 38 11 2009-10-10
10001 3333 白色 39 15 2009-10-10
10002 1111 红色 39 10 2009-11-10
10003 1111 白色 40 10 2009-11-20
10002 2222 白色 39 13 2009-12-10

出仓表
出仓单号 款式 颜色 规格 数量 日期
10001 1111 红色 38 3 2009-10-10
10001 2222 红色 38 3 2009-10-10
10002 1111 红色 39 2 2009-11-10
10010 1111 白色 40 3 2009-11-25
10010 2222 红色 38 2 2009-11-25
10012 2222 白色 39 5 2009-12-10

我想做一个月结表,如查询 11 月的月结数,可以得到如下的数据(其中,期初数为 11 月以前的进仓数减去出仓数,本月进仓数为11月份的进仓数,本月出仓数为11月份的出仓数,期未数为:期初数+本月进仓-本月出仓)
款号 期初数 本月进仓 本月出仓 期未数
1111 7 20 5 22
2222 8 0 2 6

select 款式,
(select sum(数量) from 进仓表 where 款式=a.款式 and 日期<'2009-11-1' )-(select sum(数量) from 出仓表 where 款式=a.款式 and 日期<'2009-11-1' ) as 期初数,
(select sum(数量) from 进仓表 where 款式=a.款式 and 日期>='2009-11-1' and 日期<='2009-11-30') as 本月进仓,
(select sum(数量) from 出仓表 where 款式=a.款式 and 日期>='2009-11-1' and 日期<='2009-11-30') as 本月进仓,
(select sum(数量) from 进仓表 where 款式=a.款式 and 日期<='2009-11-30' )-(select sum(数量) from 出仓表 where 款式=a.款式 and 日期<'2009-11-30' ) as 期末数 from 进仓表 as a group by 款式

你这个东东有点复杂了,一个SQL语句解决不了的,如果我来做,得先做好两个视图,把两个表的数据以年度、月份和款号汇总。
然后给这两个视图来一个out join,这样才可以满足你的要求。
还有另外一种办法,按你月结表的要求建一个表,在进仓表和出仓表各做一个更新和插入(还要删除)触发器,每次对这两个表的数据进行操作,就立即更新月结表的相应的内容,
或者,做一个存储过程,一调用存储过程,就立即完成把月结表重刷一遍,这个办法最准确,而且省心,但要求比较高。

我会的。我来给你做吧 HI我吧。。。。。。。