Накопительная сумма начинается с нуля в новый год

#sql #sql-server #sum #sql-order-by #aggregate-functions

#sql #sql-сервер #сумма #sql-порядок по #агрегатные функции

Вопрос:

Я хочу написать SQL-запрос (SQL Server), в котором я могу накапливать значения столбца, но я хочу снова начать накопление, если начинается новый год.

Например, у меня есть такая таблица:

введите описание изображения здесь

В настоящее время мой запрос выглядит следующим образом:

 SELECT *, SUM(value) OVER (ORDER BY YEAR ASC, Monthnum ASC) as RESULT 
from TABLE 
ORDER BY YEAR DESC, MONTHNUM DESC
 

И мой результат выглядит так:

введите описание изображения здесь

Но чего я действительно хочу, так это чтобы мой результат был таким:

введите описание изображения здесь

Ответ №1:

Только partition by год:

 SELECT *, SUM(value) OVER (PARTITION BY YEAR ORDER BY Monthnum) as RESULT 
from TABLE               --^--> here
ORDER BY YEAR DESC, MONTHNUM DESC