나는이 합류 : 당신이 볼 수 있듯이결합 계산이 작동하지 않습니까?
UPDATE Table_Name
SET Change = isnull(tab2.Value,0) - tab1.Value
FROM
(SELECT Date,ID,ID,FileName,Value FROM Table_Name WHERE FileName = 'x' AND Date = '2012-05-17') tab1
LEFT OUTER JOIN
(SELECT Date,ID,TradeID,FileName,Value FROM Table_Name WHERE FileName = 'x' AND Date = '2012-05-18') tab2
ON tab1.FileName = tab2.FileName AND
tab1.ID = tab2.ID AND
tab1.ID = tab2.ID
, 그것은 왼쪽 외부 조인입니다. 그러나 5 월 17 일 데이터가 있고 5 월 18 일 데이터가없는 경우 삽입 된 값은 -17 번째 값이어야합니다 (일반 계산은 18 번째이므로 값 - 17 번째. 값과 18 번째. 값은 0입니다).
삽입 부분 (디버깅 용) 바로 아래에 select 문을 넣으면 올바르게 표시되지만 SELECT 문을 제거하고 SET 부분에서 계산을 수행하면 올바르게 작동하지 않습니다. 나는 Change of null의 값으로 끝난다. 여기서 5 월 18 일에 대한 일치가 발견되지 않았다.
편집 : LEFT JOIN 또는 LEFT OUTER JOIN이 필요한지 불확실합니다. tab1에서 모든 행을 반환하고 tab2에 존재하지 않으면 변경 값은 tab2.Value - tab1.Value와는 반대로 -tab1.Value 여야합니다.
두 번째가 아닌 첫 번째 값에 대한 ISNULL 검사를 수행하고 있는데 문제가 될 수 있습니까? –
@PaulMcCowat'EXISTS'는 그 테이블에서 값을 다시 가져올 수 없습니다. 그는'JOIN' 테이블이 아닌 소스 테이블이기 때문에 두번째 필드에'NULL'을 가지지 않을 것입니다. – JNK
'tab2.value'가'NULL' 인 계산을 위해 어떤 값을 얻고 있습니까? – JNK