Суммарная сумма Когда строки имеют одинаковое значение sql sql сервер - PullRequest
0 голосов
/ 29 января 2020

Я хотел бы сделать кумулятивную сумму столбца Подытог , чтобы получить кумулятивный столбец RunningTotal . Но я заметил, что если строки имеют одинаковые значения, накопительная сумма не работает. Например, в приведенном ниже примере строка 5 и строка 6 имеют одинаковое значение подытога 838,9178. Из-за этого столбец RunningTotal не суммирует строки 5 и 6.

example

Как я могу решить эту проблему? Я ожидаю получить результаты, как показано ниже:

expected

Ниже, пожалуйста, найдите мой запрос. Спасибо заранее!

select YEAR(OrderDate) as FiscalYear,
       REPLACE(CONVERT(varchar(12), OrderDate,1), ' ', '-') as OrderDate,
       SubTotal,
       SUM (SubTotal) OVER (partition by YEAR(OrderDate) ORDER BY OrderDate,SubTotal ) AS RunningTotal
from Sales.SalesOrderHeader
where YEAR(OrderDate)=2012 or YEAR(OrderDate)=2013
order by YEAR(OrderDate),OrderDate;

1 Ответ

1 голос
/ 29 января 2020

Вам нужно предложение row для оконной работы или стабильная сортировка. Попробуйте это:

   SUM(SubTotal) OVER (partition by YEAR(OrderDate) ORDER BY OrderDate ROWS BETWEEN UNBOUNDED PRECEDING AND CURENT ROW) AS RunningTotal

Или, если у вас есть уникальный идентификатор в строке:

   SUM(SubTotal) OVER (partition by YEAR(OrderDate) ORDER BY OrderDate, UniqueId) AS RunningTotal

Проблема в том, что в оконном предложении по умолчанию используется RANGE BETWEEN, а это не то, что ты хочешь.

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