日期:2014-05-17  浏览次数:20639 次

求根据上一列的数据计算下一数的值的SQL

select * into # from (
select 
'QRD121008401' 出入库单号, '2012-10-28'单据日期, 'S565840A0'存货编码, '男长袖衬衫'存货名称 ,'43/17.4'尺码, 0 上存数量, 1 入库数量 ,0 出库合计, 0 结存数量, 1 ID union all select
'QRD121009006' , '2012-10-28', 'S565840A0', '男长袖衬衫' ,'43/17.4', 1 ,2 ,0, 0 ,2 union all select
'XSC121010041' , '2012-10-18', 'G4046A0' ,'羽绒服' ,'50', 2 ,0 ,1, 1 ,3 union all select
'XSC121014219' , '2012-10-28', 'G4046A0' ,'羽绒服' ,'50', 1, 0 ,1 ,0, 4 union all select
'QCD121008150' , '2012-10-26', 'G4046A0' ,'羽绒服' ,'52' ,2 ,0 ,1, 1 ,5 union all select
'XSC121000678' , '2012-10-01', 'G4046A0' ,'羽绒服' ,'54',1 ,0, 1, 0, 6
) a
select * from #

----以上是测试数据

--这我的写法,可是结存数量这一列不一样.

 select 
  出入库单号,单据日期,存货编码,存货名称,尺码
  
  ,上存数量=isnull((select top 1 上存数量 from # WHERE 单据日期=t.单据日期 and 存货编码=t.存货编码 and 尺码=t.尺码 order by ID)
    -(select sum(出库合计) from # where 单据日期=t.单据日期 and 存货编码=t.存货编码  and 尺码=t.尺码 and iD<t.ID),上存数量)
    
    
,入库数量,出库合计
  ,结存数量=(select top 1 上存数量+t.入库数量 from # where 单据日期=t.单据日期 and 存货编码=t.存货编码 and 尺码=t.尺码  order by ID)
-(select sum(出库合计) from # where 单据日期=t.单据日期 and 存货编码=t.存货编码 and 尺码=t.尺码 and ID<=t.ID)
,ID
  from # t
  go

----以下是我的结果


出入库单号        单据日期       存货编码      存货名称       尺码      上存数量        入库数量        出库合计        结存数量        ID
------------ ---------- --------- ---------- ------- ----------- ----------- ----------- ----------- -----------
QRD121008401 2012-10-28 S565840A0 男长袖衬衫      43/17.4 0           1           0           1           1
QRD121009006 2012-10-28 S565840A0 男长袖衬衫      43/17.4 0           2           0           2           2
XSC121010041 2012-10-18 G4046A0   羽绒服        50      2           0           1           1           3
XSC121014219 2012-10-28 G4046A0   羽绒服        50      1           0       &nb