Нямам SQL Server под ръка и SQLFiddle не ми работи добре напоследък, така че това не е тествано, но логиката трябва да работи...
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
Първо инвертирайте количествата на поръчката си, за да бъдат отрицателни, така че те са сумата, с която нивата на запасите ще се променят.
След това обединете нивата на наличностите си с поръчките с необходимо време 0 (за да стане малко като поръчка, която доставя наличност, а не взема наличност, и идва преди всичките ви други поръчки) .
След това изчислете какво е общото оставащо количество от даден продукт след поръчка; чрез сумиране на всички предходни редове (по време) за този продукт. (Предаване на Stock - Order1 - Order2, etc, etc
)
След това изберете редовете, където новото ниво на запасите е станало отрицателно.