sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Er det muligt at sammenligne timeordrer i alt og fjerne nuværende lager?

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.



  1. Langsom forespørgsel på information_schema.tables

  2. Hent understreng i SQL Server

  3. Forskel mellem mislykket OPDATERING på grund af falske betingelser og mislykket OPDATERING på grund af uændrede værdier

  4. Django - Relationsrelation eksisterer ikke. Kan du ikke køre python manage.py migrate?