Nemám po ruce SQL Server a SQLFiddle si se mnou poslední dobou moc nehraje, takže to není otestováno, ale logika by měla fungovat...
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
Nejprve převraťte množství objednávky na záporné, takže jde o množství, o které se změní stav zásob.
Dále sjednoťte své skladové zásoby s objednávkami s požadovaným časem 0 (aby to bylo trochu jako objednávka, která spíše dodává zásoby než skladuje, a je před všemi vašimi ostatními objednávkami) .
Dále zjistěte, jaké je celkové zbývající množství produktu po objednávce; sečtením všech předchozích řádků (v časovém pořadí) pro daný produkt. (Zadáním Stock - Order1 - Order2, etc, etc
)
Poté vyberte řádky, ve kterých je nová úroveň zásob záporná.