当前位置: 代码迷 >> Sql Server >> 麻烦帮忙看一下这个语句错在哪里,该怎么处理
  详细解决方案

麻烦帮忙看一下这个语句错在哪里,该怎么处理

热度:94   发布时间:2016-04-27 20:32:58.0
麻烦帮忙看一下这个语句错在哪里
表   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

不过感觉楼主的数据根算法有点问题。
  相关解决方案