Рассчитайте текущую общую логику c, но первая ячейка становится пустой - PullRequest
0 голосов
/ 27 февраля 2020

Мне нужно создать промежуточную сумму для отчета. Я попытался использовать неограниченную оконную функцию , но моя первая ячейка становится пустой . Мне нужна та же логика c в первой ячейке тоже. Ниже указана первоначальная сумма в таблице. Я использую его для создания текущей суммы по ссылочному номеру в порядке убывания

Начальная сумма = 995

Logi c пробовал :

InitialAmount - SUM (Amount)  OVER(PARTITION BY ID Order By REFERENCE_NUMBER DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) AS RUNNING_AMOUNT

Результат:

enter image description here

Ожидаемый результат:

enter image description here

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Проблема в том, что ваше окно пусто для первой строки, поэтому sum() дает null, который распространяется на результат вычитания.

Вы можете обойти это с помощью coalesce() :

InitialAmount 
    - COALESCE(
        SUM (Amount) OVER(
            PARTITION BY ID 
            Order By REFERENCE_NUMBER DESC 
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ),
        0
    ) AS RUNNING_AMOUNT
0 голосов
/ 27 февраля 2020

Я обычно пишу это без выражения окна как:

(InitialAmount -
 (SUM(Amount)  OVER (PARTITION BY ID Order By REFERENCE_NUMBER DESC) - Amount
 )
) AS RUNNING_AMOUNT

То есть, он просто делает обычную накопленную сумму (включая текущую строку) и вычитает текущее значение).

0 голосов
/ 27 февраля 2020

Вы можете попробовать добавить isnull, 0 Я думаю, это может быть проблемой здесь.

InitialAmount - isnull(SUM (Amount)  OVER(PARTITION BY ID Order By REFERENCE_NUMBER 
DESC ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ),0) AS RUNNING_AMOUNT
...