2016-08-18 9 views
0

Excel에서 오는 데이터에 중복 행이 있습니다. SSIS 패키지에서 정렬은 기본 키 열 ID에 따라 오름차순으로 정렬되는 정렬 변환을 사용하고 있습니다. 하지만 중복을 제거하기 전에 이메일 열에 회사 도메인이 포함 된 이메일이 있는지 확인하고 싶습니다. 그렇다면이 유형의 전자 메일 주소를 가진 것보다 다른 행이 제거되기를 바랍니다. 어떻게해야합니까? 아래 첨부 된 이미지를 참조하십시오. Image of data I haveSSIS 패키지에서 열 데이터에 대한 우선 설정으로 중복 제거

위의 데이터에서 전자 메일 주소가 [email protected] 인 John의 두 행을 제거하고 싶습니다. Maria의 경우, 전자 메일 주소가 [email protected] 인 두 행을 제거하여 mycompany.com 도메인의 전자 메일 주소가있는 행을 유지하려고합니다. 도메인 mycompany.com의 이메일 주소를 가진 사용자의 행이 여러 개인 경우 하나의 행을 도메인 이메일 주소로 유지하려고합니다.

제안하십시오.

답변

0

당신은 코비가 보여준 것처럼 SQL에서 그렇게 할 수 있습니다.하지만 당신은 SSIS에서 선호하는 경우 :

내 테스트 데이터 :

enter image description here

enter image description here

몇 가지 포인트 :

조건부 분할 : mycompany과없는 사람들과 먼저 별도의 행.

sort 및 non_mycompany 정렬 : id에 출력을 모두 정렬하고 중복을 제거합니다.

mycompany_multicast : 가입 mycompany

병합과 행의 두 복사본을 만드는이 : mycompany와 행에 mycompany없이 행을 가입 떠났다. 조인 순서에 유의하십시오. 목적은 mycompany없이 행을 가져오고 mycompany 행에서 일치하는 ID가없는 것입니다.

enter image description here

조건부 split1 : mycompany와 mycompany와 행에 일치하는 번호가없는 행을. mycompany를 사용하여 행에서 id를 확인할 수 있습니다. id가 null이면 행에 mycompany가 일치하지 않습니다. 모든

enter image description here

노동 조합 : 노동 조합의 최종 결과는

+0

감사합니다. 잘 했어. – sangam

0

당신은이 같은 성명 사용할 수 있습니다

WITH T AS 
(
SELECT ROW_NUMBER() OVER (partition BY id ORDER BY id, CASE WHEN email LIKE '%@mycompany.com' THEN 0 ELSE 1 END) rn FROM persons 
) 
DELETE FROM T 
WHERE rn > 1 

그것은 일종의 모든 유사한 ID와 이메일로 행 (@mycompany로 선호하는 메일이 목록의 첫 번째), 각 그룹에 ROWNUMBER 추가를 및 마무리, 모든 행에 우수한 ROWNUMBER이 느릅 나무 삭제 한 다음

테스트 데이터이다 (논문 중복이다)

CREATE TABLE 명 ( ID NUMERIC (5) , NAME VARCHAR (200), email VARCHAR (400)); 사람 INTO

INSERT VALUES (100 '존' '[email protected]') (100 '존' '[email protected]') (100 'john', '[email protected]'); 사람 INTO

INSERT VALUES (200 '마리아' '[email protected]') (200 '마리아' '[email protected]') (200 'maria', '[email protected]'); 사람 INTO

INSERT VALUES (300 '장' '[email protected]') (300 '장' '[email protected]') (300 '진', '[email protected]'), (300, '진', '[email protected]');

명 INSERT INTO VALUES (400 톰 ' '[email protected] ') (400 톰' '[email protected]');

+0

나는 SSIS 패키지에서이 작업을 수행 할 의무입니다. – sangam