Jeg har ikke SQL Server ved hånden, og SQLFiddle spiller ikke godt med mig på det seneste, så dette er ikke testet, men logikken burde virke...
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
Inverter først dine ordremængder til at være negative, så de er det beløb, lagerbeholdningerne vil ændre sig med.
Foren derefter dine lagerniveauer til ordrerne med en påkrævet tid på 0 (for at gøre det lidt som en ordre, der leverer lager i stedet for lagerbeholdning og kommer før alle dine andre ordrer) .
Dernæst skal du regne ud, hvad den samlede resterende mængde af et produkt er efter en ordre; ved at opsummere alle de foregående rækker (i tidsrækkefølge) for det pågældende produkt. (Giver Stock - Order1 - Order2, etc, etc
)
Vælg derefter de rækker, hvor det nye lagerniveau er blevet negativt.