求sql预计

咳嗽哥 2010-11-27 06:42:21
用 sql server 2000 或者2005
原表数据

合同编号 本期收款
000001 200.00
000001 350.00
000001 450.00
000001 800.00
000002 200.00
000002 350.00
000002 450.00
000002 800.00
000003 200.00
000003 350.00
000003 450.00
000003 800.00
求出累计金额

合同编号 本期收款 累计收款
000001 200.00 200
000001 350.00 550
000001 450.00 1000
000001 800.00 1800
000002 200.00 200
000002 350.00 550
000002 450.00 1000
000002 800.00 1800
000003 200.00 200
000003 350.00 550
000003 450.00 1000
000003 800.00 1800
...全文
57 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
abuying 2010-11-29
  • 打赏
  • 举报
回复
;with cte as(
select id=row_number()over(partition by 合同编号 order by 本期收款 asc),* from tb
)
select t.*,累计收款=(select sum(本期收款) from cte where 合同编号 = t.合同编号 and id <= t.id) from cte t


dawugui 2010-11-28
  • 打赏
  • 举报
回复
--如果能确保同一合同编号后面的本期收款>前面的本期收款,则可以如下,否则需要加上一个序号。
create table tb (合同编号 varchar(6),本期收款 numeric(5,2))
insert into tb
select '000001',200.00 union all
select '000001',350.00 union all
select '000001',450.00 union all
select '000001',800.00 union all
select '000002',200.00 union all
select '000002',350.00 union all
select '000002',450.00 union all
select '000002',800.00 union all
select '000003',200.00 union all
select '000003',350.00 union all
select '000003',450.00 union all
select '000003',800.00
go

select t.*,累计收款=(select sum(本期收款) from tb where 合同编号 = t.合同编号 and 本期收款 <= t.本期收款) from tb t

drop table tb

/*
合同编号 本期收款 累计收款
------ ------- ----------------------------------------
000001 200.00 200.00
000001 350.00 550.00
000001 450.00 1000.00
000001 800.00 1800.00
000002 200.00 200.00
000002 350.00 550.00
000002 450.00 1000.00
000002 800.00 1800.00
000003 200.00 200.00
000003 350.00 550.00
000003 450.00 1000.00
000003 800.00 1800.00

(所影响的行数为 12 行)
*/
304的的哥 2010-11-27
  • 打赏
  • 举报
回复

关键是自动增量id列,用于比较并逐条统计!
华夏小卒 2010-11-27
  • 打赏
  • 举报
回复
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (合同编号 varchar(6),本期收款 numeric(5,2))
insert into #tb
select '000001',200.00 union all
select '000001',350.00 union all
select '000001',450.00 union all
select '000001',800.00 union all
select '000002',200.00 union all
select '000002',350.00 union all
select '000002',450.00 union all
select '000002',800.00 union all
select '000003',200.00 union all
select '000003',350.00 union all
select '000003',450.00 union all
select '000003',800.00

alter table #tb add id int identity(1,1)

select 合同编号,本期收款,
累计收款=(select sum(本期收款) from #tb where 合同编号=t.合同编号 and id<=t.id)
from #tb t

合同编号 本期收款 累计收款
------ --------------------------------------- ---------------------------------------
000001 200.00 200.00
000001 350.00 550.00
000001 450.00 1000.00
000001 800.00 1800.00
000002 200.00 200.00
000002 350.00 550.00
000002 450.00 1000.00
000002 800.00 1800.00
000003 200.00 200.00
000003 350.00 550.00
000003 450.00 1000.00
000003 800.00 1800.00

(12 行受影响)

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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