2014-04-01 3 views
-1

나는 다음과 같은 데이터 테이블이 있습니다SQL 업데이트

Description | LongDescription | rn 
TEST     ERIC   1 
TEST     KEN   2 
TEST     JIM   3 
TEST     TOM   4 

내가 RN = 1 LongDescription = 에릭 RN 1의 LongDescriptions을 연결할 위치를 말할 수 있도록하려면 2 - 업데이트를 사용하여 문은 그래서 또한이도 가능 1 명, 2 등

되는 RN 너무있을 것 이상의 인스턴스 위에 나열된 것보다 더 많은 데이터가 있음을 언급 할 필요가

Description | LongDescription | rn 
TEST     ERIC - KEN  1 
TEST     KEN   2 
TEST     JIM   3 
TEST     TOM   4 

끝낼?

+0

'rn = 1'인 샘플 데이터에 여러 행을 표시하고 "KEN"행에 대한 업데이트를 위해 "ERIC"행을 선택하는 논리를 제공하면 도움이됩니다. – Thomas

답변

1

UPDATE desc_table 
SET desc_table.longdescription = desc_table.longdescription+'-'+b.longdescription 
FROM desc_table 
INNER JOIN desc_table b 
ON desc_table.rn = b.rn-1 
+0

감사합니다. 약간의 조정 만하면됩니다. – user3219693

+0

당신을 진심으로 환영합니다. – Sharad

0

시도하십시오 :

update tbl 
set LongDescription= LongDescription +'-'+(select LongDescription from tbl where rn=2) 
where rn=1 
+0

아, 나는 테이블에 예제 데이터보다 많은 데이터가 있다고 언급 했으므로이 쿼리를 실행하면 하위 쿼리에서 두 개 이상의 값이 반환됩니다. – user3219693

+0

그래서 LongDescription 값을 선택하는 기준은 무엇입니까? – TechDo

+0

분마다 rn <> 1 인 테이블의 모든 항목을 삭제하여 각 사용자에 대한 최신 레코드를 반환하지만 사용자 열도 있지만 LongDescription = Ken이 될 때마다 위와 같은 작업을 수행 할 수 있기를 바랍니다. (이 작업은 두 번 이상 발생할 것입니다.) 그 전에 – user3219693

0
Update SomeTable 
Set LongDescription = Stuff(
         (
         Select ' - ' + T1.LongDescription 
         From SomeTable As T1 
         Where T1.rn = SomeTable.rn 
         Order By <add sorting here> 
         For Xml Path(''), type 
         ), 1, 2, '') 
Where SomeTable.PrimaryKeyCol = (
           Select TOP 1 T2.PrimaryKeyCol 
           From SomeTable As T2 
           Where T2.rn = SomeTable.rn 
           Order By T2.LongDescription 
           ) 

은 위의 솔루션의 개요입니다보십시오. 필요한 것은 올바른 행을 선택하는 논리입니다. 위의 솔루션에서 간단한 알파벳 정렬을 사용하여 각 rn 값의 첫 번째 값을 간단히 선택했습니다.