2012-11-13 5 views
-2

같은 행에있는 다른 열의 값이 임시 테이블의 값과 같은 경우 열에 1을 추가하려고합니다. 아래는 코드입니다. 저장 프로 시저에서 코드를 실행하면 임시 테이블에 나타나는 코드뿐만 아니라 모든 열에 1이 추가됩니다. 쿼리에 문제가있는 사람이 있습니까? 당신이 사용할 수있는값이 임시 테이블에있을 때 SQL 열 업데이트

DECLARE @LineTable TABLE (
TempLineNumber FLOAT) 


INSERT @LineTable 
SELECT DocumentNumber 
FROM chargebackdetailtemptable 
GROUP BY DocumentNumber 
HAVING Count(*) > 1 

UPDATE ChargebackDetailTempTable 
SET LineNumber = (SELECT Max(LineNumber) + 1 
        FROM ChargebackDetailTempTable c 
          LEFT OUTER JOIN @LineTable c2 
           ON c.DocumentNumber = c2.TempLineNumber 
        WHERE c.DocumentNumber IS NOT NULL 
          AND c2.TempLineNumber IS NOT NULL) 
+1

같은 '최대 (LineNumber) +1'로 모든 행을 업데이트하고 있습니다. WHERE 조건을 지정하지 않았습니다. – LittleBobbyTables

+0

쿼리에 WHERE 조건이 있는데 이동해야합니까? – Jeff

답변

0
UPDATE ChargebackDetailTempTable 
SET LineNumber = LineNumber + 1 
FROM ChargebackDetailTempTable 
INNER JOIN @LineTable lt ON lt.DocumentNumber = ChargebackDetailTempTable.DocumentNumber 
WHERE lt.DocumentNumber IS NOT NULL 

은 UPDATE 문에 조인. 위의 질문에서 서브 쿼리에 c2이라는 별칭이 지정된 lt의 행 번호 또는 기타 항목이 +1되었는지 확실하지 않았습니다. 어느 쪽이든, 이것은 당신이되고 싶은 곳으로 가야합니다.

+0

어디서 업데이트 문장에 "where"절을 넣어야합니까, Eli? 임시 테이블에서 null이 아닌 레코드 만 '내부 조인'후에 +1 – Jeff

+0

이 될 필요가 있습니다. 'ChargeBack'과'@ LineTable' 사이에 일대일 관계 ('DocumentNumber'가 둘 다 고유하다는 의미)가 있다면'WHERE lt.DocumentNumber IS NOT NULL'입니다. 내 게시물을 예제로 업데이트했습니다. 그러나 업데이트에 필터를 적용하는 것보다 임시 테이블에 넣지 않으려는 문서를 삽입하지 않는 것이 더 쉽다고 생각하지 않습니까? 즉, 업데이트를 수행하기 전에 임시 테이블을 사전 필터링하십시오. –

+0

. 고마워요. – Jeff