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

大哥哥,大姐姐,我想这样的结果怎么得到啊?
基数表:
仓库编号 数量基数
001 600
002 1000

进货单表:
仓库编号 商品编号 数量 库存余量
001 0000000003 2 0
001 0000000003 4 0
002 0000000003 10 0
002 0000000003 5 0
002 0000000003 1 0

现在的问题是每个仓库都有个数量基数,我想要得到库存余量,
库存余量是这样算的:
同一仓库的进货单表第一条先加仓库的数量基数,然后同仓库的进货单表的下一条数据的库存余量加上上一条数据的库存余量,依次类推,不同仓库的另外做为一组自己加。。。

那么我要得到结果是:
仓库编号字段 商品编号字段 数量字段 库存余量
001 0000000003 2 602
001 0000000003 4 606
002 0000000003 10 1010
002 0000000003 5 1015
002 0000000003 1 1016

------解决方案--------------------
SQL code
with 进货
as
(select row_number()over(partition by 仓库编号,商品编号 order by 仓库编号) as row ,* from 进货单表)

select 
*,(select sum(数量) from 进货 where 仓库编号=a.仓库编号 and 商品编号=a.商品编号 and row<=a.row)+b.数量基数
from 进货 as a
inner join 基数表 as b on a.仓库编号=b.仓库编号

------解决方案--------------------
SQL code

;with cte as
(
    select rn=ROW_NUMBER() over(order by 仓库编号),*,b.基数 from tb a join tb1 b on a.仓库编号=b.仓库编号
)
select y.仓库编号,y.商品编号,y.数量,y.基数+(select SUM(x.数量) FROM CTE x where x.仓库编号=y.仓库编号 AND x.rn<y.rn) from cte y 
-- tb 是第二个表 tb1是第一个
-- tb看就不是还有一个顺序列段?在over(partition by 仓库编号 order by getdate())--  这里

------解决方案--------------------
SQL code
SQL2000:进货单表沒有標識大小或日期?

--沒有時可用臨時表
select IDENTITY(INT,1,1) as row ,* 
INTO #进货
from 进货单表

select 
*,(select sum(数量) from #进货 where 仓库编号=a.仓库编号 and 商品编号=a.商品编号 and row<=a.row)+b.数量基数
from #进货 as a
inner join 基数表 as b on a.仓库编号=b.仓库编号

--有時可用
select 
*,(select sum(数量) from 进货单表 where 仓库编号=a.仓库编号 and 商品编号=a.商品编号 and 日期<=a.日期)+b.数量基数
from 进货单表 as a
inner join 基数表 as b on a.仓库编号=b.仓库编号