Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Comparer le total des commandes horaires et supprimer le stock actuel Possible ?

Je n'ai pas SQL Server sous la main et SQLFiddle ne joue pas bien avec moi ces derniers temps, donc ce n'est pas testé, mais la logique devrait fonctionner...

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

Commencez par inverser les quantités de votre commande pour qu'elles soient négatives, afin qu'elles correspondent au montant dont les niveaux de stock vont changer.

Ensuite, associez vos niveaux de stock aux commandes, avec un temps requis de 0 (pour en faire un peu comme une commande qui livre du stock plutôt qu'elle fait l'inventaire, et passe avant toutes vos autres commandes) .

Ensuite, déterminez la quantité totale restante d'un produit après une commande ; en additionnant toutes les lignes précédentes (dans l'ordre chronologique) pour ce produit. (Donnant Stock - Order1 - Order2, etc, etc )

Sélectionnez ensuite les lignes où le nouveau niveau de stock est devenu négatif.