2012-12-11 4 views
0

단일 쿼리 실행에서 이전에 업데이트 된 값을 사용하여 레코드를 업데이트하려고합니다. 그것은 전체 사례지만, UPDATE 쿼리가 아닌 SELECT 쿼리입니다.이전에 업데이트 된 값을 사용하여 업데이트

재고 (간체)

Id Qty RunningQty ItShouldBeUpdatedTo InsteadItsUpdatedTo 
1 200 0   200     200 
2 300 0   500     300 
3 400 0   900     400 
4 100 0   1000    100 

나의 현재 쿼리 다음 행을 업데이트하는 것이

UPDATE Inventory 
SET RunningQty = ISNULL(A.RunningQuantity, 0) + Quantity 
FROM Inventory I 
OUTER APPLY 
(
    -- Take previous row RunningQty 
    SELECT TOP 1 RunningQty 
    FROM Inventory 
    WHERE Id < I.Id 
    ORDER BY Id DESC 
) A 

같은 것입니다, SQL Server는 이전에 업데이트 된 값을 사용하지.

참고 : 난 금액 실행 현재 행 수량 값을 추가 이전 행을 사용하여 계산할 수 있도록 상당히 큰 테이블이 아닌 최초의 행에서 산출된다.

어떻게해야할까요?

미리 감사드립니다.

답변

0

날이 같은 것을 사용할 수 있습니다이 해당 버전에서 SQL 서버 2012에서 할 훨씬 쉬울 것이다,라고하여이 서문 보자

update i1 
set i1.runningqty = i2.RunningQty 
from inventory i1 
inner join 
(
    select id, SUM(qty) OVER(ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) RunningQty 
    from inventory 
) i2 
    on i1.id = i2.id; 

참조 SQL Fiddle with Demo

그러나 이 SQL Server 2008의 쉽지 않다, 그러나이 같은 것을 사용할 수 있어야합니다 :

declare @total int 
set @total = 0 

update inventory 
set runningqty = @total, 
    @total = @total + qty; 

SQL Fiddle with Demo를 참조하십시오.

SQL Server 2008에서 커서를 사용하여 수행 할 수있는 다른 방법이 있습니다.

관련 문제