Ik heb geen SQL Server bij de hand en SQLFiddle speelt de laatste tijd niet goed met me, dus dit is niet getest, maar de logica zou moeten werken...
WITH
stock_changes
AS
(
SELECT Supplier, Destination, Req_Time, Prd_Code, Prd_Description, -Qty AS Qty FROM orders
UNION ALL
SELECT Supplier, NULL, '00:00', Prd_Code, Prd_Desc, Stock FROM stock
),
stock_post_order
AS
(
SELECT
*,
SUM(Qty) OVER (PARTITION BY Supplier, Prd_Code
ORDER BY Req_Time
ROWS UNBOUNDED PRECEDING
)
AS new_qty
FROM
stock_changes
)
SELECT
*,
CASE WHEN new_qty > qty THEN new_qty ELSE qty END AS order_shortfall
FROM
stock_post_order
WHERE
new_qty < 0
Keer eerst uw bestelhoeveelheden om zodat ze negatief zijn, zodat ze het bedrag zijn waarmee de voorraadniveaus zullen veranderen.
Verbind vervolgens uw voorraadniveaus met de bestellingen, met een vereiste tijd van 0 (om het een beetje te laten lijken op een bestelling die voorraad levert in plaats van inventariseert, en vóór al uw andere bestellingen komt) .
Bereken vervolgens wat de totale resterende hoeveelheid van een product is na een bestelling; door alle voorgaande rijen (in tijdsvolgorde) voor dat product op te tellen. (Geef Stock - Order1 - Order2, etc, etc
)
Selecteer vervolgens de rijen waar het nieuwe voorraadniveau negatief is geworden.