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), снова начните итоги.

Другие вопросы по тегам