时间                  名称 出入数量 剩余数量
2010-1-1 13:00:00    a   1        1
2010-1-1 14:00:00    a   2        3
2010-1-1 15:00:00    a   3        6
2010-1-2 13:00:00    a   -1       5
时间、名称、出入数量可由数据库查出,该如何生成“剩余数量”该列

解决方案 »

  1.   

    select * , 剩余数量 = (select sum(出入数量) from tb where 时间 >= t.时间) from tb t
      

  2.   

    create table tb(时间 datetime,名称 varchar(10),出入数量 int)
    insert into tb values('2010-1-1 13:00:00' ,   'a' , 1)
    insert into tb values('2010-1-1 14:00:00' ,   'a' , 2)
    insert into tb values('2010-1-1 15:00:00' ,   'a' , 3)
    insert into tb values('2010-1-2 13:00:00' ,   'a' , -1)
    goselect * , 剩余数量 = (select sum(出入数量) from tb where 时间 <= t.时间) from tb tdrop table tb/*
    时间                                                     名称         出入数量        剩余数量        
    ------------------------------------------------------ ---------- ----------- ----------- 
    2010-01-01 13:00:00.000                                a          1           1
    2010-01-01 14:00:00.000                                a          2           3
    2010-01-01 15:00:00.000                                a          3           6
    2010-01-02 13:00:00.000                                a          -1          5(所影响的行数为 4 行)
    */
      

  3.   

    时间                  名称 出入数量 剩余数量 
    2010-1-1 13:00:00    a  1        1 
    2010-1-1 14:00:00    a  2        3 
    2010-1-1 15:00:00    a  3        6 
    2010-1-2 13:00:00    a  -1       5
    2010-1-2 13:00:00    b  1        1
    2010-1-2 13:00:00    c  1        1
      

  4.   

    不好意思。例子写错了。只记录了日期。并没有记录时间
    2010-1-1 00:00:00    a  1        1 
    2010-1-1 00:00:00    a  2        3 
    2010-1-1 00:00:00    a  3        6 
    2010-1-2 00:00:00    a  -1      5 
    2010-1-2 00:00:00    b  1        1 
    2010-1-2 00:00:00    c  1        1 
      

  5.   

    没有时间,那就必须有个顺序号,假设为ID.select * , 剩余数量 = (select sum(出入数量) from tb where 名称 = t.名称 and id <= t.id) from tb t否则得用游标来做.
      

  6.   

    create table tb(id int,时间 datetime,名称 varchar(10),出入数量 int)
    insert into tb values(1,'2010-1-1 13:00:00' ,   'a' , 1)
    insert into tb values(2,'2010-1-1 14:00:00' ,   'a' , 2)
    insert into tb values(3,'2010-1-1 15:00:00' ,   'a' , 3)
    insert into tb values(4,'2010-1-2 13:00:00' ,   'a' , -1)
    insert into tb values(5,'2010-1-2 00:00:00' ,   'b' , 1)
    insert into tb values(6,'2010-1-2 00:00:00' ,   'c' , 1)
    goselect * , 剩余数量 = (select sum(出入数量) from tb where 名称 = t.名称 and id <= t.id) from tb t drop table tb/*
    id          时间                                                     名称         出入数量        剩余数量        
    ----------- ------------------------------------------------------ ---------- ----------- ----------- 
    1           2010-01-01 13:00:00.000                                a          1           1
    2           2010-01-01 14:00:00.000                                a          2           3
    3           2010-01-01 15:00:00.000                                a          3           6
    4           2010-01-02 13:00:00.000                                a          -1          5
    5           2010-01-02 00:00:00.000                                b          1           1
    6           2010-01-02 00:00:00.000                                c          1           1(所影响的行数为 6 行)
    */如上,如果时间不起作用的话,必须有个顺序号,否则得用游标去做.
    以下是游标的基本写法.自己去做.游标的基本写法declare @id int,@name varchar(20);
    declare cur cursor fast_forward for
      select id,name from a;
    open cur;
    fetch next from cur into @id,@name;
    while @@fetch_status=0
    begin
       --做你要做的事
       fetch next from cur into @id,@name;
    end
    close cur;
    deallocate cur;