SQL - функция LAG - итоговая сумма - PullRequest
0 голосов
/ 03 октября 2019

Я надеюсь, что кто-то может помочь. Я не знаю, возможно ли это, но здесь идет речь.

Использование SQL Developer, подключенного к базе данных Oracle.

У меня следующий набор данных, возвращаемый из запроса

Item  Qty  On Hand
A     6     88
A     6     88
A     6     88
B     2      4
B     1      4
B     2      4

Использование функции LAG для поля Shortage

Lag(Qty) Over (Partition By Item Order By Item) As Shortage

Возвращает

Item  Qty  On_Hand   Shortage
----  ---  -------   ---------
A     6     88       NULL
A     6     88       6
A     6     88       6
B     2      4       NULL
B     1      4       1
B     2      4       2

I Решить значение NULL, используя

Nvl(Lag(Qty) Over (Partition By Item Order By Item), On_Hand + Qty) As Shortage

(Если 'LAG 'Значение равно NULL замените NULL на Current On_Hand - Qty)

Item  Qty  On_Hand   Shortage                                 
A     6     88        82
A     6     88         6
A     6     88         6
B     2      4         2
B     1      4         2
B     2      4         1

Это хорошо для первого ряда. То, что я действительно ищу, это

Item  Qty  On_Hand   Shortage  Shortage2
                               (Funtion Below)  
A     6     88        82
A     6     88        76
A     6     88        70
B     2      4         2
B     1      4         1
B     2      4        -1

, где столбец Дефицит фактически является вычислением

Предыдущее значение дефицита строки - Требуемое количество текущей строки.

Является ли этовозможно?

Я очень на это надеюсь.

Большое спасибо всем заранее за вашу помощь

С уважением

Iain

1 Ответ

1 голос
/ 03 октября 2019

Я думаю, что вы хотите накопительную сумму. Однако вам нужен столбец, в котором указан порядок строк, и в ваших данных такой столбец не очевиден:

select t.*,
       (on_hand - sum(qty) over (partition by item order by ?)) as shortage
from t;

Вы можете использовать item, но результаты нестабильны, то естьВы можете запустить один и тот же код дважды и получить разные результаты.

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