Добавление значений из предыдущей строки в текущую строку - PullRequest
0 голосов
/ 24 января 2020

У меня есть простая таблица, и я хочу добавить значение из предыдущей строки в current и значение current в следующей строке, чтобы оно продолжалось до конца.

Пожалуйста, посмотрите на следующие данные таблицы .

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)

Я ищу запрос на выборку, который позволяет мне постоянно добавлять значения.

Ответы [ 3 ]

2 голосов
/ 24 января 2020

Вы можете сделать сумму окна:

select id, value, sum(value) over (order by id) valueincrement
from mytable
order by id

Демонстрация на SQL Server 2014 Fiddle :

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
0 голосов
/ 24 января 2020

Вы можете попробовать рекурсивную сумму

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;
0 голосов
/ 24 января 2020

Вы также можете использовать correlated sub-query, если вы работаете с небольшой таблицей (в противном случае, по соображениям производительности, вам абсолютно не следует использовать этот подход, если вы можете использовать оконные функции ). Я предполагаю, что ваш столбец valueincrement, начинающийся с 0, является опечаткой, а не задуман. Дайте нам знать, если иначе.

select *, (select sum(value) from mytable t2 where t1.id >= t2.id) as valueincrement
from mytable t1
order by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...