Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Comparar o total de pedidos por hora e remover o estoque atual possível?


Eu não tenho o SQL Server à mão e o SQLFiddle não está jogando bem comigo ultimamente, então isso não foi testado, mas a lógica deve 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

Primeiro, inverta as quantidades do seu pedido para que sejam negativas, para que elas sejam a quantidade pela qual os níveis de estoque serão alterados.

Em seguida, junte seus níveis de estoque aos pedidos, com um tempo necessário de 0 (para torná-lo um pouco como um pedido que entrega o estoque em vez de fazer o estoque e chegar antes de todos os outros pedidos) .

Em seguida, descubra qual é a quantidade total restante de um produto após um pedido; somando todas as linhas anteriores (em ordem de tempo) para esse produto. (Fornecendo Stock - Order1 - Order2, etc, etc )

Em seguida, selecione as linhas em que o novo nível de estoque ficou negativo.