读书人

大哥哥大姐姐小弟我想这样的结果如

发布时间: 2012-05-01 12:48:58 作者: rapoo

大哥哥,大姐姐,我想这样的结果怎么得到啊?
基数表:
仓库编号 数量基数
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 ainner 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 ainner join 基数表 as b on a.仓库编号=b.仓库编号--有可用select *,(select sum(数量) from 进货单表 where 仓库编号=a.仓库编号 and 商品编号=a.商品编号 and 日期<=a.日期)+b.数量基数from 进货单表 as ainner join 基数表 as b on a.仓库编号=b.仓库编号 

读书人网 >SQL Server

热点推荐