Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将上一行中的值添加到当前行_Sql_Sql Server_Select_Sum_Sql Server 2014 - Fatal编程技术网

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!如果我的回答正确回答了您的问题,请单击复选标记。你也可以把它和所有其他你认为有用的答案一起投上一票。