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

SQL Server 2008 phiên bản OVER (... Hàng không bị ràng buộc trước)

Một cách đơn giản để làm điều đó là sử dụng truy vấn phụ tương quan trong CROSS APPLY .

Nếu bàn của bạn lớn hơn hoặc ít hơn, thì câu hỏi tiếp theo của bạn sẽ là làm thế nào để làm cho nó nhanh. Lập chỉ mục trên PlaceB, Product, PickTime INCLUDE (Qty) nên giúp. Tuy nhiên, nếu bảng của bạn thực sự lớn, con trỏ sẽ tốt hơn.

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;

Ồ, và nếu (PlaceB, Product, PickTime) không phải là duy nhất, bạn sẽ nhận được kết quả hơi khác với truy vấn ban đầu với SUM() OVER . Nếu bạn cần các kết quả giống hệt nhau, bạn cần sử dụng thêm một số cột (như ID ) để giải quyết các mối quan hệ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể sử dụng một luồng để CHÈN hoặc CẬP NHẬT một hàng trong SQL Server (C #) không?

  2. Có cách nào để chỉ định nhiều Lược đồ SQL Server 2008 cho lệnh 'createChangeLog' của Liquibase không?

  3. SQL SERVER - Hiểu cách MIN (văn bản) hoạt động

  4. Nối nhiều hàng thành một chuỗi văn bản duy nhất bằng cách nhóm

  5. Kiểm tra xem một đối tượng có phải là khóa chính với OBJECTPROPERTY () trong SQL Server hay không