sql累计求和问题

时间:2021-04-16 00:37:37
比如有一table 如下:
ID a
1 3
2 4
3 4
4 7
5 7
我现在想得到如下的效果
ID a  b
1 3  3
2 4  7
3 4  11
4 7  18
5 7  25

就是b列是对a 依次累加
这个sql语句应该如何写??高手指教

15 个解决方案

#1


SELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#2


create table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
go

select m.*, a + isnull((select sum(a) from tb where id < m.id),0) b from tb m

drop table tb

/*
ID          a           b           
----------- ----------- ----------- 
1           3           3
2           4           7
3           4           11
4           7           18
5           7           25

(所影响的行数为 5 行)
*/

#3


create table aa(ID int ,a int)
go
insert aa select 1,3
insert aa select 2,4
insert aa select 3,4
insert aa select 4,7
insert aa select 5,7
go
select ID,a,(select sum(a) from aa where ID<=a.ID) b from aa  a
go
--结果
/*
ID  a   b
1 3 3
2 4 7
3 4 11
4 7 18
5 7 25*/

#4


 
select ID,a,(select sum(a) from Table where ID<=T.ID) b from Table  T

#5


我试过了,这个方法真的很好

#6


我觉得一楼这样就可以了
引用 1 楼 liangCK 的回复:
SQL codeSELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#7


SELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#8


mark

#9


引用 2 楼 dawugui 的回复:
SQL codecreate table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
go

select m.*, a + isnull((select sum(a) from tb where id < m.id),0) b from tb m

drop table tb

/*
ID          a           b           
----------- ----------- ----------- 
1           3           3…

可以

#10


学习了

#11


mark 一楼的方法就可以

#12



create table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
--方法1-------------------------------------
select m.*, a + isnull((select sum(a) from tb where ID < m.ID),0) b from tb m
--方法2-------------------------------------
select ID,a,(select sum(a) from tb where ID<=a.ID) b from tb  a
--结果--------------------------------------
ID      a       b
-----   -----   -----
1 3 3
2 4 7
3 4 11
4 7 18
5 7 25

#13


学习

#14



--顺便练习一下APPLY的用法
DECLARE  @t TABLE 
(
ID VARCHAR(10),
a INT 
)
INSERT @t
SELECT '1',3
UNION ALL SELECT '2', 4
UNION ALL SELECT '3', 4
UNION ALL SELECT '4', 7
UNION ALL SELECT '5', 7 


SELECT * FROM @t t1 OUTER APPLY (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) t2

#15


我也来一个吧

DECLARE @t TABLE(id VARCHAR(10),a INT )
INSERT @t
SELECT '1',3
UNION ALL SELECT '2', 4
UNION ALL SELECT '3', 4
UNION ALL SELECT '4', 7
UNION ALL SELECT '5', 7 

select id, a, (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) as b from @t t1


/*
(5 row(s) affected)
id         a           b
---------- ----------- -----------
1          3           3
2          4           7
3          4           11
4          7           18
5          7           25
*/

#1


SELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#2


create table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
go

select m.*, a + isnull((select sum(a) from tb where id < m.id),0) b from tb m

drop table tb

/*
ID          a           b           
----------- ----------- ----------- 
1           3           3
2           4           7
3           4           11
4           7           18
5           7           25

(所影响的行数为 5 行)
*/

#3


create table aa(ID int ,a int)
go
insert aa select 1,3
insert aa select 2,4
insert aa select 3,4
insert aa select 4,7
insert aa select 5,7
go
select ID,a,(select sum(a) from aa where ID<=a.ID) b from aa  a
go
--结果
/*
ID  a   b
1 3 3
2 4 7
3 4 11
4 7 18
5 7 25*/

#4


 
select ID,a,(select sum(a) from Table where ID<=T.ID) b from Table  T

#5


我试过了,这个方法真的很好

#6


我觉得一楼这样就可以了
引用 1 楼 liangCK 的回复:
SQL codeSELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#7


SELECT 
    ID,
    a,
    (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
FROM tb AS A

#8


mark

#9


引用 2 楼 dawugui 的回复:
SQL codecreate table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
go

select m.*, a + isnull((select sum(a) from tb where id < m.id),0) b from tb m

drop table tb

/*
ID          a           b           
----------- ----------- ----------- 
1           3           3…

可以

#10


学习了

#11


mark 一楼的方法就可以

#12



create table tb(ID int,a int)
insert into tb values(1 ,3 )
insert into tb values(2 ,4 )
insert into tb values(3 ,4 )
insert into tb values(4 ,7 )
insert into tb values(5 ,7 )
--方法1-------------------------------------
select m.*, a + isnull((select sum(a) from tb where ID < m.ID),0) b from tb m
--方法2-------------------------------------
select ID,a,(select sum(a) from tb where ID<=a.ID) b from tb  a
--结果--------------------------------------
ID      a       b
-----   -----   -----
1 3 3
2 4 7
3 4 11
4 7 18
5 7 25

#13


学习

#14



--顺便练习一下APPLY的用法
DECLARE  @t TABLE 
(
ID VARCHAR(10),
a INT 
)
INSERT @t
SELECT '1',3
UNION ALL SELECT '2', 4
UNION ALL SELECT '3', 4
UNION ALL SELECT '4', 7
UNION ALL SELECT '5', 7 


SELECT * FROM @t t1 OUTER APPLY (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) t2

#15


我也来一个吧

DECLARE @t TABLE(id VARCHAR(10),a INT )
INSERT @t
SELECT '1',3
UNION ALL SELECT '2', 4
UNION ALL SELECT '3', 4
UNION ALL SELECT '4', 7
UNION ALL SELECT '5', 7 

select id, a, (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) as b from @t t1


/*
(5 row(s) affected)
id         a           b
---------- ----------- -----------
1          3           3
2          4           7
3          4           11
4          7           18
5          7           25
*/