入库信息
时间 数量 单价 商品ID
2003.1.1 10 10 1
2003.1.5 20 15 1
2003.1.8 15 20 1
出库信息
时间 数量 商品ID
2003.1.2 5 1
2003.1.8 26 1
查询结果
入库时间 数量 单价 商品ID
2003.1.1 5 10 1 对应出库 5
2003.1.1 5 10 1 对应出库 26
2003.1.5 20 15 1 对应出库 26
2003.1.8 1 20 1 对应出库 26
查询的结果是要查询出库的单价来,而出库的单价要根据入库的情况计算出来。就是把入库数量的信息按出库的数量分配。同时把入库的单价也查询出来。
---------------------------------------------------------------
select A.时间 时间,A.数量-B.数量 数量,A.单价 单价,A.商品ID 商品ID
from 入库信息表 A,出库信息表 B
where A.商品ID=B.商品ID and A.时间
1<b.时间 #t="" #t1="" '2003-1-1',="" '2003-1-2',="" '2003-1-5',="" '2003-1-8',="" *="" 1="" 10,="" 15,="" 1:昨天还看到有先进先出法的贴子,你找一下。="" 20,="" 26,="" 2:如果在入库时指定一唯一的批号,出库时按此批号出库,那就简单多了。="" 5,="" @iamt="" @id="1" @idate="" @oamt="" @odate="时间" @price="" \---------------------------------------------------------------="" by="" create="" datetime="" datetime,="" declare="" from="" insert="" int="" int)="" int,="" into="" order="" select="" set="" table="" top="" where="" while="" 入库信息="" 入库信息(="" 出库信息="" 出库信息(="" 单价="" 商品id="@id" 数量="" 时间="" 这是先进先出的结果,做起来挺负责的。=""> 0
2begin
3select top 1 @iamt = 数量, @price = 单价, @idate = 时间 from #t order by 时间
4if @iamt > @oamt
5begin
6update #t set 数量 = 数量 - @oamt where 时间 = @idate
7insert #t1 select @idate, @oamt, @price, @id
8set @oamt = 0
9end
10else
11begin
12delete #t where 时间 = @idate
13insert #t1 select @idate, @iamt, @price, @id
14set @oamt = @oamt - @iamt
15end
16if @oamt = 0
17begin
18select top 1 @oamt = 数量, @odate = 时间 from 出库信息 where 商品ID = @id and 时间 > @odate order by 时间
19end
20end
21select * from #t1
22
23时间 数量 单价 商品ID
24\------------------------------------------------------ ----------- ----------- -----------
252003-01-01 00:00:00.000 5 10 1
262003-01-01 00:00:00.000 5 10 1
272003-01-05 00:00:00.000 20 15 1
282003-01-08 00:00:00.000 1 20 1</b.时间>