本帖最后由 wangqiang2007 于 2010-09-08 12:09:59 编辑

解决方案 »

  1.   

    --> 测试数据: [入库表]
    if object_id('[入库表]') is not null drop table [入库表]
    create table [入库表] (产品ID int,入库数量 int,入库日期 datetime)
    insert into [入库表]
    select 1,1000,'2010-4-30' union all
    select 1,100,'2010-5-1' union all
    select 1,200,'2010-5-2'
    --> 测试数据: [出库表]
    if object_id('[出库表]') is not null drop table [出库表]
    create table [出库表] (产品ID int,出库数量 int,出库日期 datetime)
    insert into [出库表]
    select 1,200,'2010-5-1' union all
    select 1,100,'2010-5-2'declare @star datetime
    set @star='2010-5-1'
    select 期初数,入库数量,出库数量,结余=期初数+入库数量-出库数量,日期=入库日期 from 
    (select 期初数=(select sum(入库数量) from 入库表 where datediff(dd,入库日期,a.入库日期)>0)-
    isnull((select sum(出库数量) from [出库表] where datediff(dd,出库日期,a.入库日期)>0),0),
    入库数量,出库数量=(select 出库数量 from [出库表] where datediff(dd,出库日期,a.入库日期)=0),
    入库日期 from [入库表] a where datediff(dd,@star,入库日期)>=0)a
    /*结果:
    期初数         入库数量        出库数量        结余          日期
    ----------- ----------- ----------- ----------- -----------------------
    1000        100         200         900         2010-05-01 00:00:00.000
    900         200         100         1000        2010-05-02 00:00:00.000
    */
      

  2.   


    --大致写了一下,算练练手,好久不写了
    create table test(产品ID int,入库数量 int,入库日期 datetime)
    insert into test values(1, 1000 ,'2010-4-30')
    insert into test values(1, 100 ,'2010-5-1')
    insert into test values(1, 200, '2010-5-2')create table testOut(产品ID int, 出库数量 int, 出库日期 datetime)
    insert into testOut values(1, 200, '2010-5-1')
    insert into testOut values(1, 100, '2010-5-2')select a.产品ID,期初数=(select 入库数量 from test where datediff(day,入库日期,dateadd(day,-1,a.入库日期))=0)
    ,a.入库数量,b.出库数量,
    结余=(select 入库数量 from test where datediff(day,入库日期,dateadd(day,-1,a.入库日期))=0)+a.入库数量-b.出库数量,a.入库日期 
    from test a,testOut b
    where a.产品ID=b.产品ID and datediff(day,a.入库日期,b.出库日期)=0drop table test
    drop table testOut1 1000 100 200 900 2010-05-01 00:00:00.000
    1 100 200 100 200 2010-05-02 00:00:00.000
      

  3.   

    个人的思路:
    1.建一个表A,表结构如下:
    产品ID  日期    入库数量     出库数量2.把你表中的数据更新到表A里面3.按产品ID分类统计各产品在5月1号后的数量select 产品ID,(SUM(入库数量)-SUM(出库数量))as 结存数量
    from A
    where 日期>='2010-05-01' 
    group by 产品ID
    ---要用动态sql的话,把用带日期参数存储过程了,存储过程里面运行动态sql。