日期:2014-05-16  浏览次数:20860 次

求一条sql谢谢!
有表如下:
姓名     当前累计金额     金额     序号
a             0                       10           1
a             0                       15           2
a             0                       10           3

想变为如下:
姓名     当前累计金额     金额     序号
a             10                       10         1
a             25                       15         2
a             35                       10         3
我就想得到当前的累计金额,请问我该如何写sql
谢谢!

------解决方案--------------------
SELECT *,(select sum(金额) from ttq where a.姓名=姓名 and a.序号> =序号) as 当前累计金额
from ttq a

------解决方案--------------------
or
SELECT a.姓名,a.金额,a.序号,sum(b.金额) as 当前累计金额 from ttq a
inner join ttq b on a.姓名=b.姓名 and a.序号> =b.序号
group by a.姓名,a.金额,a.序号
order by a.序号
------解决方案--------------------
--用子查询
SELECT
姓名,
(select sum(金额) from 表名 where 姓名=t.姓名 and 序号 <=t.序号) as 当前累计金额,
金额,
序号
from 表名 t
------解决方案--------------------
--如果是要更新,需要使用域函数

update 表名 as t set 当前累计金额=Dsum( "金额 ", "表名 ", "姓名= ' " & t.姓名 & " ' and 序号 <= " & t.序号 & ") "


上述代码是在Access中执行,因为域函数只能在Access内部使用。


如果是在外部执行,需要先将结果生成中间表,然后再用update进行关联更新。


------解决方案--------------------
Access使用的是Jet-SQL,而SQL Server使用的是T-SQL,两者用法上相差很大。

Access的Update语句中,对于含有聚合子查询的支持远比不上SQL Server,所以要使用域函数或借助临时表。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=