日期:2014-05-19  浏览次数:20576 次

麻烦帮忙看一下这个语句错在哪里
表   tt 表结构如下
rid,   client_id,   job_date,   ysk_money,   yfk_money
(其中   ysk_money   应收款,yfk_money   应付款)
1     1001     07-06-01     1000
2     1001     07-06-05                     3000
3     1002     07-06-02     20000
4     1001     07-05-03     3000
5     1001     07-06-06                     1000


我想算出每行的累加数,也就是截止到这一行的累计应收款,累计应付款,余额

用下面的语句可以算出,但觉得似乎每个累计都要重算一次,挺耗资源的
select   a.rid,   a.job_date,   a.ysk_money,   a.yfk_money,   (select   sum(ysk_money)   as   ysk_left   from   tt   b
    where   b.client_id   =   a.client_id   and   b.job_date   <=   a.job_date   and   b.rid   <=   a.rid),   ...
from   tt   a  


能不能把三个累计一次算完,就像下面这样
select   a.rid,   job_date,   ysk_money,   yfk_money,   c.ysk_left,   c.yfk_left
  from   tt   a   inner   join   (select   rid,   sum(ysk_money)   as   ysk_left,   sum(yfk_money)   as   yfk_left   from   tt   b
    where   b.client_id   =   a.client_id   and   b.job_date   <=   a.job_date   and   b.rid   <=   a.rid   group   by   rid)   c   on   a.rid   =   c.rid

---提示出错
服务器:   消息   107,级别   16,状态   2,行   1
列前缀   'a '   与查询中所用的表名或别名不匹配。
服务器:   消息   107,级别   16,状态   1,行   1
列前缀   'a '   与查询中所用的表名或别名不匹配。
服务器:   消息   107,级别   16,状态   1,行   1
列前缀   'a '   与查询中所用的表名或别名不匹配。
服务器:   消息   107,级别   16,状态   1,行   1
列前缀   'a '   与查询中所用的表名或别名不匹配。


------解决方案--------------------

select rid, client_id, job_date, ysk_money, yfk_money,
ysk_left = (select sum(ysk_money)
from tt where client_id = a.client_id and
job_date <= a.job_date and rid <= a.rid ),
yfk_left = (select sum(yfk_money)
from tt where client_id = a.client_id and
job_date <= a.job_date and rid <= a.rid )
from tt a

不过感觉楼主的数据根算法有点问题。