Мне нужно суммировать сумму, основанную на условии, что значение либо соответствует, либо является только одним значением записи, превышающим столбец, которому он должен соответствовать. Я делаю систему, чтобы отслеживать, было ли полностью использовано количество деталей, которые были заказаны. Поскольку вы можете заказать несколько штук в одном заказе и использовать небольшие объемы за раз, мне нужно знать, когда использовалось количество заказа.Суммарная сумма Oracle на основе транзакций использования
Пример:
Subquery показывает транзакции использования для каждой части
OrderNumber | PartNumber | OrderQty | LastUsageDate | Usage
j55789 | ks568 | 8 | 10 - oct | 2
j55789 | ks568 | 8 | 11 - oct | 2
j55789 | ks568 | 8 | 11 - oct | 2
j55789 | ks568 | 8 | 12 - oct | 2
j55789 | ks568 | 8 | 13 - oct | 2
И это, как мои результаты выглядят с информацией выше
OrderNumber | PartNumber | OrderQty | LastUsageDate | Usage
j55789 | ks568 | 8 | 12 - oct | 8
Как вы заметили, в результате остановки кумулятивная сумма на уровне 8 по мере необходимости и показывает значение LastUsageDate. Но, несмотря на то, что он использует суммарную сумму, если речь идет о числе, которое сделает сумму больше, чем OrderQty, она не включает ее, эта часть исключается из результатов, несмотря на то, что она была полностью использована.
Вот пример этого.
OrderNumber | PartNumber | OrderQty | LastUsageDate | Usage
j55789 | ks568 | 8 | 10 - oct | 2
j55789 | ks568 | 8 | 11 - oct | 2
j55789 | ks568 | 8 | 11 - oct | 2
j55789 | ks568 | 8 | 12 - oct | 3
j55789 | ks568 | 8 | 13 - oct | 2
Если это данные для части, это не будет иметь никаких результатов, поскольку совокупная сумма идет от 6 до 9 из дней 11-Окт 12-Окт.
Мне нужно, чтобы сумма суммарной суммы включала запись, даже если сумма была бы больше, чем OrderQty, но она также должна прекратить считать за этой записью. Так что мой результат должен быть.
OrderNumber | PartNumber | OrderQty | LastUsageDate | Usage
j55789 | ks568 | 8 | 12 - oct | 9
Вот SQL:
SELECT d1.* FROM(
SELECT c1.*, max(c1.LastGiDate) LastGiDate, max(c1.cum_sum) GIQty FROM(
SELECT b1.*, SUM(b1.GiQty) OVER (PARTITION BY b1.MRNum, b1.PartNo ORDER BY b1.LastGiDate) cum_sum FROM(***subquery here***) c1
WHERE c1.cum_sum <= c1.OrderQty
GROUP BY ***c1 fields***) d1
WHERE d1.GIQty >= d1.OrderQty;
ИНЕКЕ ограничивает данные, которые получает суммируются, но она будет включать в себя только на следующий номер, если оно не поставить cum_sum над OrderQty. Я не уверен, как изменить это, чтобы включить следующую запись, даже если она идет выше OrderQty.
Я думаю, что это может сработать. Мне нужно быстро реализовать его в моем коде, и я обновлю, если у меня появятся вопросы. – Zionmoose
На самом деле у меня есть вопрос. Есть ли способ изменить это, чтобы он также показывал столбец использования, если он равен нулю. Есть некоторые части, которые пока не имеют никакого использования, это только показывает строки, которые имеют какое-то использование. – Zionmoose
Nevermind, я считаю, что я решил нулевую проблему. – Zionmoose