2012-02-22 4 views

답변

0
UPDATE YOURTABLE T 
SET T.AMT_DIFF = (T.AMT - NVL((SELECT TT.AMT 
            FROM YOURTABLE TT 
            WHERE TT.WEEK_NO = (T.WEEK_NO - 1) 
            ) 
            ,0) 
        ) 
WHERE T.WEEK_NO = 2; 

당신에게 도움이 될 수 있습니다.

+0

가 오라클에'NVL' 독특한인가? – JNK

+0

@JNK Google을 당신을 위해서 그렇게 해 주시겠습니까? 좋아, 농담이야. AFAIK 대답은 '예'입니다. 누군가 RDBMS 독립 솔루션을 원한다면 ANSI 표준 인'COALESCE (...) '를 사용할 수도 있습니다. –

+0

나는 google을했고 오라클만을위한 히트 곡을 가지고있다. 그래서 내가 물었다. – JNK

1

나는 이것이 작동해야한다고 생각합니다. 먼저 원하는 결과를 얻으려면 SELECT으로 만들 수 있습니다. 이 구문은 다른 RDBMS에 대해 확실하지 않은 SQL Server에서 유효합니다.

UPDATE m2 
SET amt_diff = (m2.amt-m1.amt) 
FROM MyTable m2 
INNER JOIN MyTable m1 
    ON m1.week_no = (M2.week_no - 1) 

계산할 주 다음에있는 모든 레코드를 업데이트합니다.

그냥 값을 선택하려면

SELECT amt_diff = (m2.amt-m1.amt) 
FROM MyTable m2 
INNER JOIN MyTable m1 
    ON m1.week_no = (M2.week_no - 1) 
+0

하지만이 값은 5 개의 테이블에 합류하여 얻는다. week2 행의 week2-week1 값 – ResKing

+0

@ResKing은 의미가 없습니다. 뭐가 필요해? – JNK

+0

u가 제공 한 쿼리는 테이블을 업데이트하는 것입니다 ??? 하지만 난 테이블을 업데이 트하지 않고 값을 혼자 표시 싶습니다 – ResKing

0
update k 
set k.amt_diff=(select k2.amt from week k2 where week_no=k.week_no+1)-amt 
from week k 
관련 문제