Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008 версия на OVER(... Редове неограничени преди)

Един пряк начин да го направите е да използвате корелирана подзаявка в CROSS APPLY .

Ако вашата маса е повече или по-малко голяма, тогава следващият ви въпрос ще бъде как да я направите бързо. Индекс на PlaceB, Product, PickTime INCLUDE (Qty) трябва да помогне. Но ако таблицата ви е наистина голяма, курсорът би бил по-добър.

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;

О, и ако (PlaceB, Product, PickTime) не е уникален, ще получите донякъде различни резултати от оригиналната заявка с SUM() OVER . Ако имате нужда от точно същите резултати, трябва да използвате допълнителна колона (като ID ), за да разрешите връзките.




  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 Server

  2. SQL:Преобразуване на цяло число в шестнадесетичен низ?

  3. Обработка на грешки с курсор в SQL

  4. Изявление MERGE на SQL Server 2008 - как да деактивирате тригера INSTEAD OF INSERT, за да разрешите MERGE

  5. Избройте всички бази данни от свързан сървър в SQL Server (T-SQL примери)