SSMS SQL Необходимо увеличить значение для каждой строки для группы
У меня есть следующая таблица:-
policy number transaction date value running total
123 26/01/2015 1000.00 0
123 13/02/2017 3000.00 0
234 14/02/2014 500.00 0
234 14/02/2016 4500.00 0
234 23/06/2018 1200.00 0
345 17/07/2017 7000.00 0
Я хочу, чтобы это выглядело так:
policy number transaction date value running total
123 26/01/2015 1000.00 1000.00
123 13/02/2017 3000.00 4000.00
234 14/02/2014 500.00 500.00
234 14/02/2016 4500.00 5000.00
234 23/06/2018 1200.00 6200.00
345 17/07/2017 7000.00 7000.00
2 ответа
Вы ищете функцию окна накопительной суммы, доступную в SQL Server начиная с SQL Server 2012:
select f.*,
sum(f.value) over (partition by f.policy_number order by f.transaction_date) as running_total
from following f;
Вы можете включить это в update
используя обновляемый CTE:
with toupdate as (
select f.*,
sum(f.value) over (partition by f.policy_number order by f.transaction_date) as new_running_total
from following f
)
update toupdate
set running_total = new_running_total;
Вы можете использовать этот запрос для достижения желаемого результата:
select
PolicyNumber,
TransactionDate,
[Value],
RunningTotal = SUM([Value]) OVER (PARTITION BY PolicyNumber
order by (PolicyNumber)
rows unbounded preceding)
from [dbo].[Q51340534]
Что это означает на простом английском языке: создайте группы данных с помощью PolicyNumber и сохраняйте промежуточный итог предыдущего Value
столбец для каждой группы. Как только группа изменится (изменится PolicyNumber), снова начните итоги.