UNION ALL 및 병합 변환 구현 예제
한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
다음과 같은 입력 테이블에 대해, 아래와 같은 출력을 구현하고자 합니다. 테이블 A ID name1 mail1 birthDay1 BBB 보아 b@b.b 19990101 EEE 설운도 e@e.e 20050102 테이블 B ID name2 mail2 birthDay2 AAA 성유리 a@a.a 20001001 BBB 이효리 c@c.c 20010201 DDD 홍길동 z@z.z 20001001 EEE 김이지 f@f.f 20070205 테이블 C ID name3 mail3 birthDay3 CCC 윤은혜 d@d.d 19990215 EEE 이영애 l@l.l 19970520 출력 형태 ID name1 mail1 birthDay1 name2 mail2 birthDay2 name3 mail3 birthDay3 AAA 성유리 a@a.a 20001001 BBB 보아 b@b.b 19990101 이효리 c@c.c 20010201 CCC 윤은혜 d@d.d 19990215 DDD 홍길동 z@z.z 20001001 EEE 설운도 e@e.e 20050102 김이지 f@f.f 20070205 이영애 l@l.l 19970520
우선 결과값 형태로 출력되어지기 위해서는 테이블 A, B, C 이외에도 ID를 모두 가지고 있는 테이블이 하나 더 필요합니다.
즉, 다음과 같은 테이블 입니다..
ID |
AAA |
BBB |
CCC |
DDD |
EEE |
이 테이블을 기준으로 테이블 A에서 name1, mail1, …, 테이블 B에서 name2, mail2,…, 테이블 C에서 name3, mail3, … 열을 병합 조인하는 방식으로 처리하면 원하는 결과가 나올 것 같네요.
위와 같이 고유한 ID로 이루어진 집합을 만드는 방법부터 먼저 설명하겠습니다.
우선 테이블 A, B, C의 값들은 ID 테이블을 생성할 때에도 쓰이고, 병합 조인을 할 때에도 쓰일 것이기 때문에 각각의 입력에 대해 멀티캐스트를 설정합니다.
우선 테이블 A, B, C에서 ID을 결합하는 UNION ALL ID 변환을 설정합니다.
그런 다음, 고유한(Unique) 값을 추출해 내기 위해 정렬 변환을 추가하고, 다음과 같이 설정합니다.
이 때, 아래 그림과 같이 “중복되는 정렬 값이 있는 행 제거”라는 옵션을 체크해 줍니다.
자, 이제 고유한(Unique) ID로 구성된 하나의 집합이 만들어졌습니다. 이제 병합 조인을 수행해야 합니다. 하지만, 병합 조인은 다음과 같은 두 제약 조건이 있습니다.
a. 병합 조인은 두 개의 입력만 가능합니다.
b. 각각의 입력은 정렬되어야 합니다.
우선, ID열의 입력은 정렬되었기 때문에, 테이블 A 데이터를 ID열로 정렬하도록 합니다.(<1>)
그런 다음 병합 조인 변환을 추가한 후, 정렬 ID의 출력과 정렬 A의 출력을 연결합니다. (<2>) 이때, 정렬 ID 출력이 기본이며, 정렬 A의 출력이 왼쪽 우선 외부조인으로 설정되어야 합니다.
이와 비슷한 방식으로 데이터 B, 데이터 C에 대해서도 정렬을 설정하고 병합 조인을 연결시킵니다.
이 때, 조인 유형을 왼쪽 우선 외부 조인으로 설정하는 것을 주의하시기 바랍니다.
만들어진 패키지는 다음과 같습니다.
데이터 뷰어 또는 다른 데이터 대상을 이용해서 출력되는 결과를 확인해 봅시다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
데이터 가져오기에서의 텍스트 파일 Null 처리 문제 (0) | 2009.06.20 |
---|---|
SSIS 실습 강좌 (1~10) 통합 파일 (0) | 2009.06.20 |
WMI 이벤트 감시자를 이용한 CPU 사용률 모니터링 시스템 구현 (0) | 2009.06.20 |
실습 강좌 10 - SQL Agent 등록 및 모니터링, 속성 설정 (0) | 2009.06.20 |
실습 강좌 9 - 작업 종료 및 실패 시 메일 통보 설정 (0) | 2009.06.20 |