Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL So sánh Tổng số đơn đặt hàng hàng giờ và loại bỏ hàng tồn kho hiện tại có thể xảy ra?

Tôi không có SQL Server để giao và SQLFiddle gần đây không chơi tốt với tôi, vì vậy điều này chưa được kiểm tra, nhưng logic sẽ hoạt động ...

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

Đầu tiên hãy đảo ngược số lượng đặt hàng của bạn thành số âm, vì vậy chúng là số lượng mà các mức trong kho sẽ thay đổi.

Tiếp theo, kết hợp các mức cổ phiếu của bạn với các đơn đặt hàng, với thời gian bắt buộc là 0 (để làm cho nó giống như một đơn đặt hàng giao hàng hơn là nhận hàng và đến trước tất cả các đơn đặt hàng khác của bạn) .

Tiếp theo, tính xem tổng số lượng sản phẩm còn lại sau khi đặt hàng là bao nhiêu; bằng cách cộng tất cả các hàng trước đó (theo thứ tự thời gian) cho sản phẩm đó. (Tặng Stock - Order1 - Order2, etc, etc )

Sau đó, chọn các hàng có mức cổ phiếu mới đã âm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giao thức TDS Phiên bản 8.0 là gì và tại sao tôi nên sử dụng nó?

  2. Có .NET tương đương với newsequentialid () của SQL Server không

  3. Cách trả lại giá trị mã ASCII cho một ký tự nhất định trong SQL Server

  4. Làm cách nào để chuyển một danh sách dưới dạng tham số trong một thủ tục được lưu trữ?

  5. Cách xem nhật ký giao dịch trong SQL Server 2008