三、      SQLServer数据库中有一张表,表名:销售额,结构如下:
              月份   int   PK
              该月销售额  money
             I.要求返回一个列表,结构如下:
              月份   int
              该月销售额  money
              累计销售额  money
             累计销售额额 = 记录的第一条开始算起累加至该月的销售额。
             例如: 有三条记录
              200601 100
              200602 100
              200603 100
              返回结果应为:
              200601 100  100
              200602 100  200
              200603 100  300
             II.查询当月销售额为第3位的月份
            请写出实现脚本。可以不考虑效率问题,你能想出几种解法就写几种。

解决方案 »

  1.   


    create table T([Month] int, [Money] money)
    insert T select 200601, 100
    union all select 200602, 100
    union all select 200603, 100select A.*, [SUM]=(select sum([Money]) from T where [Month]<=A.[Month]) from T as A--result
    Month       Money                 SUM                   
    ----------- --------------------- --------------------- 
    200601      100.0000              100.0000
    200602      100.0000              200.0000
    200603      100.0000              300.0000(3 row(s) affected)
      

  2.   

    谢谢!
    请问 [Month]<=A.[Month]是怎么回事?
    看不懂!
      

  3.   

    create table T([Month] int, [Money] money)
    insert T select 200601, 100
    union all select 200602, 100
    union all select 200603, 100
    create table #a([Month] int,[Money] money,[sum] money)
    declare
    @Month int,
    @Money money,
    @sum money
    set @sum=0
    declare yb cursor fast_forward for select t.* from t
    open yb
    fetch yb into @Month,@Money
    while @@fetch_status=0
    begin
    set @sum=@sum+@money
    insert #a values (@Month,@Money,@sum)
    fetch yb into @Month,@Money
    end
    close yb
    deallocate yb
    select * from #a
    200601 100.0000 100.0000
    200602 100.0000 200.0000
    200603 100.0000 300.0000
      

  4.   

    谢谢!
    请问 [Month]<=A.[Month]是怎么回事?
    看不懂!
    ----------------------------------------------------
    子查询用于合计,而[Month]<=A.[Month]是合计条件,即 在子查询中合计‘小于等于当前日期的所有金额’如果你当前日期是  200602   那么子查询中的合计的日期是  200601 200602