의 또 다른에서 한 행의 일부 열을 업데이트 I은 다음과 같습니다 일부 데이터를 가지고 : http://sqlfiddle.com/#!6/21a06/1은 같은 테이블
id step valA valB valC
------------------------------
100 1 NULL 2 3
101 2 4 5 6
102 3 7 NULL 9
103 3 10 11 12
104 4 13 14 15
105 4 NULL 14 15
106 5 NULL 18 19
107 5 20 18 19
ID가 고유 필드입니다. 다음 행의 특정 열 (이 예제에서는 valA 및 valB)에서 지정된 행의 값을 업데이트하는 쿼리를 작성하려고합니다. 두 행의 'step'이 일치하는 경우에만 (두 개 이상의 행이 일치 할 것으로 예상되지 않습니다.) valA 또는 valB 열의 값이 첫 번째 행에서 (listid 값이 더 낮은) NULL이면 동일한 값 다음 행의 열이 첫 x 째 행에 복사됩니다.
위의 테이블 예제에서 id = 102 행은 valB를 11로 업데이트해야합니다 (id = 103 인 다음 행의 valB와 일치 시키려면). 또한 id = 106의 행은 valA가 20으로 업데이트되어야합니다 (id = 107 인 다음 행의 valA와 일치 시키려면). 주어진 쌍의 행은 동시에 valA와 valB 모두에 대해 충족 된 조건을 가질 수 있습니다 (둘 다 NULL 임). step = 1 인 다른 행이 없기 때문에 id = 100 행은 영향을받지 않으며, NULL이 'step'쌍의 두 x 째 행에 있기 때문에 id = 105 행에도 손 대서지지 않습니다. 그것은 쉽게, ID = 105 행에 NULL이 또한 ID = 104 행 (13)의 값으로 업데이트 할 수 있습니다 경우
id step valA valB valC
------------------------------
100 1 NULL 2 3
101 2 4 5 6
102 3 7 11 9
103 3 10 11 12
104 4 13 14 15
105 4 NULL 14 15
106 5 20 18 19
107 5 20 18 19
을하지만, 그렇지 않다 :
결과는 다음과 같을 것이다 필요한.
관련이있는 몇 가지 질문을 발견했으며 내부 조인 등으로 여러 가지를 시도했지만 효과가있는 것은 없었습니다. 이것은 기본적인 SQL 경험을 넘어선 것입니다. 어떤 도움을 주셔서 감사합니다.
감사합니다! 나는 그것이 더 잘 작동하는 방법을 이해하기 위해 그것을 통해 갈 것이지만 그것이 내가 필요한 것을 할 것 같아 보인다. 변경 사항은 원본 테이블이 아닌 c로 변경된 것처럼 보입니다. 예 : select * with TestTable을 따라 가면 원래 데이터를 얻습니다. 원본 테이블 행이 수정되도록이 작업을 수행 할 수 있습니까? – AngeloQ