Запрос TSQL для накопленного значения


person NS.X.    schedule 09.08.2012    source источник
comment
@KenWhite, спасибо за информацию, это именно то, что я ищу. Но, пожалуйста, не думайте, что я не пробовал искать. Как не говорящий по-английски и новичок в SQL, я пробовал каждое слово, которое я мог придумать, включая объединение, накопление, историческую сумму и т. Д. Думаю, раз уж я понял это, мой вопрос действительно должен был заключаться в том, какая терминология используется для [ эта штука] в мире SQL.   -  person NS.X.    schedule 09.08.2012
comment
Вы абсолютно правы - мне не следовало делать такое предположение. Я увидел running-total в теге и сделал предположение (и все мы знаем, что это значит), что вы поместили его туда. Мои извинения. :-(   -  person Ken White    schedule 09.08.2012


Ответы (2)


Это должно получить промежуточную сумму. Попробуй это:

SELECT dateHere,
       total,
       total + COALESCE(
                         (
                            SELECT SUM(total)
                            FROM myTable b
                            WHERE b.dateHere < a.dateHere
                          ), 0) AS RunningTotal
FROM     myTable a
ORDER BY dateHere

демонстрация SQLFiddle

person John Woo    schedule 09.08.2012
comment
Могу я использовать это как определение представления? У меня ошибка выполнения SQL: неправильный синтаксис рядом с «ORDERBY». (Я заменил myTable на dbo.MyTable) - person NS.X.; 09.08.2012
comment
ORDERBY должен быть записан как два отдельных слова ORDER BY. Конечно, вы можете создать свое мнение по этому поводу. - person John Woo; 09.08.2012
comment
вы можете опубликовать свой новый запрос? обязательно замените столбцы своими именами columnNames. - person John Woo; 09.08.2012
comment
Ага ORDERBY был проблемой. Ошибка новичка. Спасибо за ответ и проявленное ко мне терпение :) - person NS.X.; 09.08.2012
comment
Без проблем. Добро пожаловать, NS :) - person John Woo; 09.08.2012

Вот один из способов сделать это с помощью коррелированного подзапроса:

select t.date, t.value,
       (select sum(t2.value)
        from t t2
        where t2.date <= t.date
       ) as cumvalue
from t
person Gordon Linoff    schedule 09.08.2012