Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल प्रति घंटा कुल ऑर्डर की तुलना करें और मौजूदा स्टॉक को हटाना संभव है?

मेरे पास SQL ​​सर्वर नहीं है और SQLFiddle हाल ही में मेरे साथ अच्छा नहीं खेल रहा है, इसलिए यह परीक्षण नहीं किया गया है, लेकिन तर्क काम करना चाहिए...

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

पहले अपने ऑर्डर की मात्रा को नकारात्मक होने के लिए उल्टा करें, इसलिए वे वह राशि हैं जिसके द्वारा स्टॉक स्तर बदलने वाले हैं।

इसके बाद, 0 के आवश्यक समय के साथ अपने स्टॉक स्तरों को ऑर्डर के साथ जोड़ दें (इसे एक ऐसे ऑर्डर की तरह बनाने के लिए जो स्टॉक लेने के बजाय स्टॉक वितरित करता है, और आपके अन्य सभी ऑर्डर से पहले आता है)

इसके बाद, यह पता लगाएं कि किसी ऑर्डर के बाद उत्पाद की कुल शेष मात्रा कितनी है; उस उत्पाद के लिए सभी पूर्ववर्ती पंक्तियों (समय क्रम में) को जोड़कर। (Stock - Order1 - Order2, etc, etc )

फिर उन पंक्तियों का चयन करें जहां नया स्टॉक स्तर नकारात्मक हो गया है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2012 में query_post_execution_showplan विस्तारित ईवेंट का प्रभाव

  2. तारीख को केवल घंटे/मिनट तक छोटा करें

  3. टी/एसक्यूएल में रिकर्सिव चाइल्ड/अभिभावक प्रश्न

  4. SSMS 2019 (v18) के लिए एक्सटेंशन कैसे बनाएं

  5. जांचें कि क्या कोई अस्थायी तालिका मौजूद है और अस्थायी तालिका बनाने से पहले उसे हटा दें