TSQL - Инкрементный итог, идущий вниз по моей таблице - PullRequest
0 голосов
/ 16 ноября 2011

Я бы хотел, чтобы в моем поле было итоговое значение. Пример:

ID - Name - Total - RollingTotal
1 - James - 10 - 10
2 - John - 20 - 30
3 - Matthew - 10 - 40

Кто-нибудь может объяснить, как это сделать в SQL? Я буквально не знаю, как это сделать, и это меня смущает!

Я задал неправильный вопрос. Моя таблица на самом деле выглядит примерно так

ID - Group - Name - Total - Rolling Total
1 - 1 - James - 10 - 10
2 - 1 - John- 10 - 20
3 - 2 - Matthew - 20 - 20
4 - 2 - Stephanie - 30 - 50

Что такое этикет стека переполнения здесь. На оригинальный вопрос был дан ответ, но я не объяснил себя достаточно хорошо. Извините всех.

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Вы можете попробовать:

SELECT t1.ID, t1.Name, t1.Total,
    (SELECT SUM(Total) FROM your_table t2
     WHERE t2.ID <= t1.ID) AS RollingTotal
FROM your_table t1
ORDER BY ID

ИЗМЕНЕНО после новых требований пользователя:

SELECT t1.ID, t1.`group`, t1.Name, t1.Total,
    (SELECT SUM(Total) FROM your_table t2
     WHERE t2.ID <= t1.ID
       AND t2.`group` = t1.`group`) AS RollingTotal
FROM your_table t1
ORDER BY ID
0 голосов
/ 16 ноября 2011

Я думаю, что ваш лучший вариант - динамически вычислять скользящий итог в представлении, как предлагает @Marco.

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

Если это то, что вам действительно нужно (то есть строки в вашей таблице имеют «естественный» порядок, и они не обновляются / удаляются после их первой вставки), вы можете использовать триггеры для вычисления вашей скользящей суммы при вставке. Синтаксис зависит от используемой СУБД.

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