继续:SQL语句逐层累计数量

erp1998 2005-12-26 04:33:09
A B
a 1
a 2
a 3
a 10

要得到结果

a 1
a 3
a 6
a 16

已有网友解决如下:
select IDENTITY(int, 1, 1) as id,* into #tbl from tbl
select A,B=(Select sum(B) from tbl where A=x.A and id<=x.id)
from #tbl as x

如果变下

A B
a 1
a 2
a 3
b 20 *
b 9
c 9
c 6

要得到结果

a 1
a 3
a 6
b 20
b 29
c 9
c 15

要分组解决,在不用游标,单用语句不知有何好办法


...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
erp1998 2005-12-27
  • 打赏
  • 举报
回复
确实是高手,佩服!!!
bugchen888 2005-12-26
  • 打赏
  • 举报
回复
五体投地,update居然玩到这种地步.....5555555........白活了.........
lxw99 2005-12-26
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘) ( )大哥,俺崇拜你。。。。。。。。。
子陌红尘 2005-12-26
  • 打赏
  • 举报
回复
declare @t table(A varchar(10),B int)
insert into @t select 'a',1
insert into @t select 'a',2
insert into @t select 'a',3
insert into @t select 'b',20
insert into @t select 'b',9
insert into @t select 'c',9
insert into @t select 'c',6


declare @a table(id int identity(1,1),A varchar(10),B int)
insert into @a select * from @t

select a.A,B=sum(b.B) from @a a,@a b where a.A=b.A and a.ID>=b.ID group by a.ID,a.A

/*
A B
---------- -----------
a 1
a 3
a 6
b 20
b 29
c 9
c 15
*/
子陌红尘 2005-12-26
  • 打赏
  • 举报
回复
declare @t table(A varchar(10),B int)
insert into @t select 'a',1
insert into @t select 'a',2
insert into @t select 'a',3
insert into @t select 'b',20
insert into @t select 'b',9
insert into @t select 'c',9
insert into @t select 'c',6

declare @a varchar(10),@b int
update @t
set
@b=case when A!=isnull(@a,'') then B else B+@b end,
@a=A,
B = @b

select * from @t
/*
A B
---------- -----------
a 1
a 3
a 6
b 20
b 29
c 9
c 15
*/

22,294

社区成员

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

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