日期:2014-05-18  浏览次数:20667 次

关于进销存中日报表及月结帐
一、在一个进销存系统中,设计了进货主表与从表,销售主表与从表,还有一个库存表(没有设置时间字段,每次进货和销售时,实时修改库存数量),通过多表连接可以查询实时库存和进货、销售数量。现在想要能形成下面的日报表,不知怎么做?进而能查询任意一天的日报表又该如何?

日报表 2007-09-05

产品 型号 期初数量 进货数量 销售数量 期末数量  
Nokia 7610 2 10 5 7 
Nokia 6110 3 5 4 4 
Moto A1200 5 4 1 8  
Moto V3i 6 4 2

二、另外这种系统一般设置有月结功能,主要目的是什么?怎么实现?

------解决方案--------------------
--给个例自己看看,从你的描述中我不出来语句如何写?

现有如下结构的表:
编号----产品名称----产量(int)----日期(varchar)
1 ----某产品1 ----100 ----20060922
2 ----某产品1 ----130 ----20060923
3 ----某产品2 ----104 ----20060924
5 ----某产品1 ----100 ----20060925
7 ----某产品1 ----200 ----20060926
.
.
.
现在要求查询每天的累计产量如:
20060923的累计产量就为20060922的100+20060923的130=230.
20060924的累计产量就为230+104=334,
20060925的累计产量为334+100=434...
请问该如何查询?


create table #a(
[id] [char] (10),
[proname] [char] (10),
[output] [int],
[dt] [datetime]
)

insert into #a(id,proname,output,dt) values('1','某产品1',100,'2006-09-22')
insert into #a(id,proname,output,dt) values('2','某产品1',130,'2006-09-23')
insert into #a(id,proname,output,dt) values('3','某产品2',104,'2006-09-24')
insert into #a(id,proname,output,dt) values('5','某产品1',100,'2006-09-25')
insert into #a(id,proname,output,dt) values('7','某产品1',200,'2006-09-26')

select *,(select sum(output) from #a where dt<=b.dt) as '每日总量'
from #a b
order by dt

drop table #a


id proname output dt 每日总量
---------- ---------- ----------- ------------------------------------------------------ ----------- 
1 某产品1 100 2006-09-22 00:00:00.000 100
2 某产品1 130 2006-09-23 00:00:00.000 230
3 某产品2 104 2006-09-24 00:00:00.000 334
5 某产品1 100 2006-09-25 00:00:00.000 434
7 某产品1 200 2006-09-26 00:00:00.000 634

(所影响的行数为 5 行)


if object_id('pubs..tb') is not null
drop table tb
go

create table tb(日期 varchar(10),品种 varchar(10),产量 int)
insert into tb(日期,品种,产量) values('2007-04-04', 'JC10' , 20)
insert into tb(日期,品种,产量) values('2007-04-04', 'T/C20', 30)
insert into tb(日期,品种,产量) values('2007-04-05', 'T/C20', 40)
insert into tb(日期,品种,产量) values('2007-04-05', 'JC10' , 10)
insert into tb(日期,品种,产量) values('2007-04-06', 'JC10' , 15)
go

select *,(select sum(产量) from tb where 日期<=b.日期 and 品种 = b.品种) as '本月累计' from tb b

drop table tb

日期 品种 产量 本月累计
---------- ---------- ----------- ----------- 
2007-04-04 JC10 20 20
2007-04-04 T/C20 30 30
2007-04-05 T/C20 40 70
2007-04-05 JC10 10 30
2007-04-06 JC10 15 45

(所影响的行数为 5 行)


------解决方案--------------------
日报表 2007-09-05 

产品 型号 期初数量 进货数量 销售数量 期末数量
Nokia 7610 2 10 5 7
Nokia 6110 3 5 4 4
Moto A1200 5 4 1 8
Moto V3i 6 4 2 

日报表: 进货/销售 的时候对 进货/销售,期末数量进行修改
感觉用触发器比较好;


二、另外这种系统一般设置有月结功能,主要目的是什么?怎么实现?

主要目的是: 更正期初(一个周期改一次),
实现: 月结的时候,用期末去修改期初,表示一个周期的完成

------解决方案--------------------
参看:http://blo