Вычтите поля в том же столбце, чтобы получить интервал - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть таблица "@ table1", и я хотел бы рекурсивно обновить столбец "Сумма" от ДНА до порядка TOP по RowID.То есть, принимая отрицательные значения, вычитая это значение из значения строки выше, если конечный результат все еще является отрицательным, вычтите это значение из следующей строки, заменив предыдущее значение на 0.

 DECLARE @table1 TABLE (RowID int, Amount int);
    INSERT @table1 VALUES 
    (1,20),
    (2,10),
    (3,-10),
    (4,10),
    (5,-5),
    (6,30);
Select * from @table1


RowID       Amount
----------- -----------
1           20
2           10
3           -10
4           10
5           -5
6           30

Таблица результатов

DECLARE @table1 TABLE (RowID int, Amount int);
    INSERT @table1 VALUES 
    (1,20),
    (2,0),
    (3,0),
    (4,5),
    (5,0),
    (6,30); 
Select * from @table1


RowID       Amount
----------- -----------
1           20
2           0
3           0
4           5
5           0
6           30

1 Ответ

1 голос
/ 21 сентября 2011

Единственный способ реализовать это (как один запрос) - это использовать что-то вроде итоговой суммы .Это фактически приводит к тому, что таблица Product объединяется сама с собой таким образом, что для каждой строки в «левой» таблице «правая» таблица содержит все записи, которые «предшествуют ей».Таким образом, вы можете сохранить промежуточный итог вашего обновленного поля.К сожалению, писать и работать ужасно сложно.

В зависимости от предполагаемого сценария использования, это может быть одним из тех редких случаев, когда курсоры являются лучшей альтернативой.Написание одного с использованием курсоров и табличных переменных должно быть относительно тривиальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...