sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Comparar pedidos totales por hora y eliminar el stock actual ¿Es posible?

No tengo SQL Server a mano y SQLFiddle no me está funcionando bien últimamente, por lo que no se ha probado, pero la lógica debería funcionar...

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

Primero invierta las cantidades de su pedido para que sean negativas, de modo que sean la cantidad por la que cambiarán los niveles de existencias.

A continuación, una los niveles de existencias a los pedidos, con un tiempo requerido de 0 (para que sea un poco como una orden que entrega existencias en lugar de tomar existencias, y viene antes que todas sus otras órdenes) .

Luego, calcule cuál es la cantidad total restante de un producto después de un pedido; sumando todas las filas anteriores (en orden de tiempo) para ese producto. (Dando Stock - Order1 - Order2, etc, etc )

A continuación, seleccione las filas en las que el nuevo nivel de existencias se haya vuelto negativo.