2011-01-07 3 views
0

약간 까다로운 문제가 있습니다. 몇 가지 조언이 필요합니다. 두 개의 별도 테이블로 분리해야하는 원본 SQL 테이블이 있습니다. 소스에는 우편 주소를 비롯한 일련의 열이 포함되어 있습니다.SQL 데이터를 두 개의 테이블로 나눕니다.

첫 번째 테이블에 모든 주소의 첫 번째 인스턴스를 포함하는 행을 추가 한 다음 두 번째 테이블에 동일한 주소가 연속적으로 추가 될 경우 추가 열이 포함됩니다. 첫 번째 표의 행 ID (조인 목적)

누구든지이 방법을 제안 할 수 있습니까? 나는 T-SQL (MS SQL Server 2008) 내에서이 모든 것을 유지하기를 원하지만 필요한 경우 일부 C#을 프로세스의 일부로 함께 사용할 수 있습니다.

답변

1

이러한 주소를 구분하는 적절한 CTE (Common Table Expression)를 생성 할 수 있어야합니다. 당신은 많은 세부 사항을 제공하지 못했습니다. 그래서 저는 컬럼과 테이블 이름을 만들어 보았습니다.

이 시도 - 그것은 당신의 테이블에서 모든 중복을 삭제합니다 :

;WITH DuplicateAddr AS 
(
    SELECT 
     (list of columns you need), 
     ROW_NUMBER() OVER (PARTITION BY Street,ZipCode,City 
          ORDER BY DateLastChange DESC) 'RowNum' 
    FROM dbo.Addresses 
) 
SELECT (list of columns) 
FROM DuplicateAddr 
WHERE RowNum > 1 
GO 

을이 CTE로, "파티션"데이터가 열 목록에 따라 - 당신이 사용해야하는 사용합니다. 데이터의 각 파티션 (예 : Street,ZipCode,City으로 정의 된 각 주소)은 일부 주문 (CTE에서 정의한대로 - DateLastChange을 하나의 가능성으로 선택)에 따라 일련 번호를 가져옵니다.

따라서 RowNum = 1이있는 행은 "SELECT (columns) FROM DuplicateAddr"대신 "첫 번째"주소 집합을 구성합니다. 당연히 그 기준에 따라 INSERT INTO ....을 수행 할 수도 있습니다.

RowNum > 1이있는 모든 행은 "중복"주소이거나 추가 주소입니다. 두 번째 테이블에 삽입하십시오.

+0

절대적으로 완벽합니다! * 매우 * 많이 감사합니다! – KenD

관련 문제