Sql 将上一行中的值添加到当前行
我有一个简单的表,我想把前一行的值加到当前值中,把下一行的当前值加到下一行,这样它就一直持续到最后 请看下表数据Sql 将上一行中的值添加到当前行,sql,sql-server,select,sum,sql-server-2014,Sql,Sql Server,Select,Sum,Sql Server 2014,我有一个简单的表,我想把前一行的值加到当前值中,把下一行的当前值加到下一行,这样它就一直持续到最后 请看下表数据 ID Value ValueIncrement 1 2 0 2 3 5 (2+3) 3 9 14 (2+3+9) 4 6 20 (2+3+9+6) 5 3 23 (2+3+9+6+3) 6 1 24 (2+3+9+6+3+
ID Value ValueIncrement
1 2 0
2 3 5 (2+3)
3 9 14 (2+3+9)
4 6 20 (2+3+9+6)
5 3 23 (2+3+9+6+3)
6 1 24 (2+3+9+6+3+1)
7 2 26 (2+3+9+6+3+1+2)
8 0 26 (2+3+9+6+3+1+2+0)
9 2 30 (2+3+9+6+3+1+2+0+2)
我正在寻找一个select查询,它可以使我连续添加值。您可以进行窗口求和:
select id, value, sum(value) over (order by id) valueincrement
from mytable
order by id
:
id | value | valueincrement
-: | ----: | -------------:
1 | 2 | 2
2 | 3 | 5
3 | 9 | 14
4 | 6 | 20
5 | 3 | 23
6 | 1 | 24
7 | 2 | 26
8 | 0 | 26
9 | 2 | 28
id |值|值增量
-: | ----: | -------------:
1 | 2 | 2
2 | 3 | 5
3 | 9 | 14
4 | 6 | 20
5 | 3 | 23
6 | 1 | 24
7 | 2 | 26
8 | 0 | 26
9 | 2 | 28
您可以进行窗口求和:
select id, value, sum(value) over (order by id) valueincrement
from mytable
order by id
:
id | value | valueincrement
-: | ----: | -------------:
1 | 2 | 2
2 | 3 | 5
3 | 9 | 14
4 | 6 | 20
5 | 3 | 23
6 | 1 | 24
7 | 2 | 26
8 | 0 | 26
9 | 2 | 28
id |值|值增量
-: | ----: | -------------:
1 | 2 | 2
2 | 3 | 5
3 | 9 | 14
4 | 6 | 20
5 | 3 | 23
6 | 1 | 24
7 | 2 | 26
8 | 0 | 26
9 | 2 | 28
如果您使用的是一个小表,您也可以使用
相关子查询
(否则,出于性能原因,如果您可以使用窗口函数,则绝对不应该使用这种方法)。我假设以0开头的valueincrement列是一个输入错误,而不是设计错误。如果不是这样,请告诉我们
select *, (select sum(value) from mytable t2 where t1.id >= t2.id) as valueincrement
from mytable t1
order by id;
如果您使用的是一个小表,您也可以使用
相关子查询
(否则,出于性能原因,如果您可以使用窗口函数,则绝对不应该使用这种方法)。我假设以0开头的valueincrement列是一个输入错误,而不是设计错误。如果不是这样,请告诉我们
select *, (select sum(value) from mytable t2 where t1.id >= t2.id) as valueincrement
from mytable t1
order by id;
你可以试试递归求和
INSERT INTO #tmpPrueba
VALUES(2),(3),(9),(6),(3),(1),(2),(0),(2)
CREATE TABLE #tmpTest
(nId INT IDENTITY(1,1),
nValor INT NOT NULL)
SELECT *
FROM #tmpTest;
SELECT SUM(nValor) OVER (ORDER BY nId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM #tmpTest;
你可以试试递归求和
INSERT INTO #tmpPrueba
VALUES(2),(3),(9),(6),(3),(1),(2),(0),(2)
CREATE TABLE #tmpTest
(nId INT IDENTITY(1,1),
nValor INT NOT NULL)
SELECT *
FROM #tmpTest;
SELECT SUM(nValor) OVER (ORDER BY nId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM #tmpTest;
为什么ValueIncrement从0开始,它应该是2?为什么ValueIncrement从0开始,它应该是2?感谢大家思考,GMB回答套装的当前需求非常好。感谢大家思考,GMB回答套装的当前需求非常好。欢迎@user3778549!如果我的回答正确回答了您的问题,请单击复选标记。你也可以把它和所有其他你认为有用的答案一起投票。欢迎@user3778549!如果我的回答正确回答了您的问题,请单击复选标记。你也可以把它和所有其他你认为有用的答案一起投上一票。