本帖最后由 thjin2007 于 2011-09-16 15:22:17 编辑

解决方案 »

  1.   

    入库明细表累加
    select
      入库单号, 行号 ,物料号, 
      入库数=(select sum(入库数) from tb where 物料号=t.物料号 and 入库单号<t.入库单号) 
    from
       tb t
      

  2.   

    2楼, 存储过程如何定啊?3楼, and 入库单号<t.入库单号) 是什么意思? 好像只有累加,但没有对比吧?谢谢!!
      

  3.   

    create table TB1(物料号 varchar(10),库存数 int,仓库号 varchar(10))
    insert into tb1 values('A1' ,100 ,'001')
    insert into tb1 values('A2' ,300 ,'001')create table TB2(入库单号 varchar(10),行号 varchar(10),物料号 varchar(10), 入库数 int)
    insert into tb2 values('B001', '01', 'A1', 30)
    insert into tb2 values('B002', '01', 'A1', 50)   
    insert into tb2 values('B003', '02', 'A2', 70)goselect m.*,
           累计数 = (case when (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) <= n.库存数 then (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) else m.入库数 end)
    from tb2 m , tb1 n
    where m.物料号 = n.物料号drop table tb1 , tb2  /*
    入库单号       行号         物料号        入库数         累计数         
    ---------- ---------- ---------- ----------- ----------- 
    B001       01         A1         30          30
    B002       01         A1         50          80
    B003       02         A2         70          70(所影响的行数为 3 行)
    */
      

  4.   

    --我增加了几行数据,这样清楚些.
    create table TB1(物料号 varchar(10),库存数 int,仓库号 varchar(10))
    insert into tb1 values('A1' ,100 ,'001')
    insert into tb1 values('A2' ,300 ,'001')create table TB2(入库单号 varchar(10),行号 varchar(10),物料号 varchar(10), 入库数 int)
    insert into tb2 values('B001', '01', 'A1', 30)
    insert into tb2 values('B002', '01', 'A1', 50)
    insert into tb2 values('B003', '01', 'A1', 30)
    insert into tb2 values('B004', '01', 'A1', 40)
    insert into tb2 values('B005', '02', 'A2', 70)goselect m.*,
           累计数 = (case when (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) <= n.库存数 then (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) 
                          when (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) > n.库存数 + m.入库数 then 0
                          else (n.库存数 + m.入库数) - (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) end)
    from tb2 m , tb1 n
    where m.物料号 = n.物料号drop table tb1 , tb2  /*
    入库单号       行号         物料号        入库数         累计数         
    ---------- ---------- ---------- ----------- ----------- 
    B001       01         A1         30          30
    B002       01         A1         50          80
    B003       01         A1         30          20
    B004       01         A1         40          0
    B005       02         A2         70          70(所影响的行数为 5 行)
    */
      

  5.   

    我上面错了点,更改为如下:
    create table TB1(物料号 varchar(10),库存数 int,仓库号 varchar(10))
    insert into tb1 values('A1' ,100 ,'001')
    insert into tb1 values('A2' ,300 ,'001')create table TB2(入库单号 varchar(10),行号 varchar(10),物料号 varchar(10), 入库数 int)
    insert into tb2 values('B001', '01', 'A1', 30)
    insert into tb2 values('B002', '01', 'A1', 50)
    insert into tb2 values('B003', '01', 'A1', 30)
    insert into tb2 values('B004', '01', 'A1', 40)
    insert into tb2 values('B005', '02', 'A2', 70)goselect m.*,
           累计数 = (case when (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) <= n.库存数 then (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) 
                          when (select sum(入库数) from tb2 where 物料号 = m.物料号 and 入库单号 <= m.入库单号) > n.库存数 + m.入库数 then 0
                          else n.库存数 end)
    from tb2 m , tb1 n
    where m.物料号 = n.物料号drop table tb1 , tb2  /*
    入库单号       行号         物料号        入库数         累计数         
    ---------- ---------- ---------- ----------- ----------- 
    B001       01         A1         30          30
    B002       01         A1         50          80
    B003       01         A1         30          100
    B004       01         A1         40          0
    B005       02         A2         70          70(所影响的行数为 5 行)
    */