如何计算值的累加

zsylizard 2007-08-09 03:10:52
我现在我有一张表 公司名称,发生额,记录公司每笔收付款的情况,
公司名称 发生额外
A 200
A 300
A -50
A -100
.....
还有一张表记公司的初始金额
公司名称 初始值
A 1000

现在需要得到这样的结果
公司名称 发生额 余额
A 200 1200
A 300 1500
A -50 1450
A -100 1350

请问SQl语句应该如何写
...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangbingjun 2007-10-26
  • 打赏
  • 举报
回复
declare @sum numeric(20,8)
set @sum=0
select number,0 sumnum into #t1 from list
update #t1 set @sum=@sum+number,sumnum=@sum
select * from #t1
drop table #t1

以上其中number为发生值,sumnum为合计值
这样应该可以的
还有一种方法就是用游标,方便理解
Limpire 2007-08-09
  • 打赏
  • 举报
回复
没有主键么
zsylizard 2007-08-09
  • 打赏
  • 举报
回复
@init=1000
select 公司名称,发生额,余额=0 into #T from A
Update #T Set 余额=发生额+@init,@init=@init+发生额
select * from #t


这样应该可以,还没在SQL上试,想到就先发上来
zsylizard 2007-08-09
  • 打赏
  • 举报
回复
如果没其它的办法,余额值只能放客户端计算了,不然数据量一大速度肯定超慢.
巴拉莱卡 2007-08-09
  • 打赏
  • 举报
回复
偶都用自连接的办法...5555555555555
超慢...不知道大家有什么好办法么
paoluo 2007-08-09
  • 打赏
  • 举报
回复
如果表中有余额這一列,可以利用變量更新。

但是查詢,好象沒辦法。
zsylizard 2007-08-09
  • 打赏
  • 举报
回复
to paoluo
按的方法是可行,不过如果数据量大,需要多次的对临时表进行Sum,
我在想,当前条记录的余额是:前面一条记录余额+本条的发生额,能否定义一个变量@init=1000
我本想是:
select 公司名称,发生额,@init=@init+发生额 from 表1 where 公司名称='A' ,但SQl不允许赋值与检索一起用.
我现在是无法将新生的初始值回写给@init,有什么办法可实现?
brother2605 2007-08-09
  • 打赏
  • 举报
回复
你这两张表没有其他字段了,有ID吗?
paoluo 2007-08-09
  • 打赏
  • 举报
回复
需要借用臨時表來排序

Select ID = Identity(Int, 1, 1), * Into #T From 表1

Select A.公司名称, A.发生额, (Select SUM(发生额) From #T Where 公司名称 = A.公司名称 And ID <= A.ID) + B.初始值 As 余额
From #T A Inner Join 表2 B
On A.公司名称 = B.公司名称

Drop Table #T

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧