额外金额  10000金额a  金额b    金额c(需处理后显示)
1000      200     10000+1000-200 = 10800
2000      300     10800+2000-300 = 12500
4000      400     12500+4000-400 = 16100
也就是下一行的结果依赖于上一行的结果。金额a和b都是数据表里的字段。金额c是需要处理后显示在页面上的。中间的处理被难住了。希望各位帮下忙或提示下。谢谢了。

解决方案 »

  1.   

    关注,好像用sql语句不好写,用程序中的datatable来写下吧,先顶下.
      

  2.   

    用游标能实现但数据量大的话没效率.
    SQL语句的话确实比较难,明天有时间再来想想哈哈.
      

  3.   


    DataTable ds=new DataTable();
    DataTable newds=ds.Copy();
    newds.Columns.Add("c", Type.GetType("System.Decimal"));
    Decimal total=0;
    for(int i=0;i<newds.Rows.Count;i++)
    {
       newds.Rows[i]["c"]=total+Convert.ToDecimal(newds.Rows[i]["a"])-Convert.ToDecimal(newds.Rows[i]["b"]);
       total=total+Convert.ToDecimal(newds.Rows[i]["a"])-Convert.ToDecimal(newds.Rows[i]["b"]);
    }
      

  4.   

    将数据取出来到DataSet或DataTable里面,再进行计算
      

  5.   

    我上面的程序假设ds已经绑定数据,然后newds增加一列c,然后循环计算下就可以了;
    当然也可以在存储过程序中用游标再计算.
      

  6.   

    帮你想了一个SQL语句,如果可行,记得加分啊。我假设你的这个账本有一个ID流水号:update abc set c=(SELECT ISNULL((SELECT Sum(a-b) FROM abc t2 WHERE t2.id < abc.id),10000) + a - b)+
    (CASE WHEN C=(SELECT TOP 1 ID FROM abc ORDER BY ID) THEN 0 ELSE 10000 END)
             
      

  7.   

    帮你想了一个SQL语句,如果可行,记得加分啊。我假设你的这个账本有一个ID流水号: 
    ======================
    呵呵。其实我只是其中几个字段。还有根据月份。上月结存。本月应付,已付啥的都没发上来。
    这些数据都是在程序里面处理后显示在页面上的。在表中根本不存在的。想了下。还是只能
    用DataTable在程序里面内部实现了。不过针对数据量大效率确实是个问题。
    PS:涉设到会计的东西还真他娘的难整。
      

  8.   

    出了一个小小的笔误应该是:
    update abc set c=(SELECT ISNULL((SELECT Sum(a-b) FROM abc t2 WHERE t2.id < abc.id),10000) + a - b)+
    (CASE WHEN ID=(SELECT TOP 1 ID FROM abc ORDER BY ID) THEN 0 ELSE 10000 end)
             
      

  9.   

    把你取出的数据放到DATASET中处理,数据量大了也没办法了在加上AJAX吧取一部分显示一部分吧 ~ 要不 怎么办?