Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Bandingkan Total Pesanan Per Jam dan Hapus Stok Saat Ini Mungkinkah?

Saya tidak memiliki SQL Server dan SQLFiddle tidak cocok dengan saya akhir-akhir ini, jadi ini belum teruji, tetapi logikanya akan bekerja...

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

Pertama-tama, balikkan jumlah pesanan Anda menjadi negatif, sehingga jumlah tersebut adalah jumlah yang akan diubah oleh tingkat stok.

Selanjutnya, gabungkan tingkat stok Anda ke pesanan, dengan waktu yang diperlukan 0 (untuk membuatnya sedikit seperti pesanan yang mengirimkan stok daripada mengambil stok, dan datang sebelum semua pesanan Anda yang lain) .

Selanjutnya, cari tahu berapa jumlah sisa produk setelah pemesanan; dengan menjumlahkan semua baris sebelumnya (dalam urutan waktu) untuk produk itu. (Memberikan Stock - Order1 - Order2, etc, etc )

Kemudian pilih baris di mana tingkat stok baru menjadi negatif.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan untuk memeriksa rentang yang tumpang tindih di server sql?

  2. Bagaimana cara mengekstrak substring khusus ini di SQL Server?

  3. Bagaimana menemukan kueri berkinerja terburuk di SQL Server 2008?

  4. Klausa WHERE lebih baik dieksekusi sebelum IN dan JOIN atau sesudahnya

  5. Mengubah format tanggal pada DB SQL Server dan bukan di seluruh server menjadi hh/bb/tttt