sql >> Databáze >  >> RDS >> Sqlserver

SQL Porovnat hodinový celkový počet objednávek a odstranit aktuální zásoby je možné?

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á.



  1. Ruby 'pg' drahokam odkazující na špatnou kopii libpq.5.dylib (na OSX)

  2. C# SQLConnection pooling

  3. Zahájení blogování pro HTML5 a CSS3

  4. Použití PHP k nahrání souboru a přidání cesty k databázi MySQL