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

SQL Server 2008 versi OVER(... Baris Tidak Terbatas Sebelumnya)

Salah satu cara langsung untuk melakukannya adalah dengan menggunakan sub-kueri yang berkorelasi di CROSS APPLY .

Jika meja Anda kurang lebih besar, maka pertanyaan Anda selanjutnya adalah bagaimana membuatnya cepat. Indeks pada PlaceB, Product, PickTime INCLUDE (Qty) harus membantu. Namun, jika meja Anda sangat besar, kursor akan lebih baik.

WITH
ADVPICK
AS
(
    SELECT 'A' as PlaceA,PlaceB, case when PickTime = '00:00' then '07:00' else isnull(picktime,'12:00') end as picktime, cast(Product as int) as product, Prd_Description, -Qty AS Qty FROM t_pick_orders
    UNION ALL
    SELECT 'A' as PlaceA,PlaceB, '0', cast(Code as int) as product, NULL, Stock FROM t_pick_stock
)
,stock_post_order
AS
(
    SELECT
        *
    FROM
        ADVPICK AS Main
        CROSS APPLY
        (
            SELECT SUM(Sub.Qty) AS new_qty
            FROM ADVPICK AS Sub
            WHERE
                Sub.PlaceB = Main.PlaceB
                AND Sub.Product = Main.Product
                AND T.PickTime <= Main.PickTime
        ) AS A
)
SELECT
    *,
    CASE WHEN new_qty > qty THEN new_qty ELSE qty END AS order_shortfall
FROM
    stock_post_order
WHERE
    new_qty < 0
ORDER BY PlaceB, picktime, product;

Oh, dan jika (PlaceB, Product, PickTime) tidak unik, Anda akan mendapatkan hasil yang agak berbeda dengan kueri asli dengan SUM() OVER . Jika Anda membutuhkan hasil yang sama persis, Anda perlu menggunakan beberapa kolom tambahan (seperti ID ) untuk menyelesaikan ikatan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah format tanggal pada DB SQL Server dan bukan di seluruh server menjadi hh/bb/tttt

  2. Pengenalan SQL Server

  3. Mengapa awalan yang dipisahkan titik diabaikan dalam daftar kolom untuk pernyataan INSERT?

  4. Casting Notasi Ilmiah (dari varchar -> numerik) dalam tampilan

  5. Bagaimana cara menulis fungsi agregat kuantil?