반응형


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에 대해서도 정렬을 설정하고 병합 조인을 연결시킵니다.

이 때, 조인 유형을 왼쪽 우선 외부 조인으로 설정하는 것을 주의하시기 바랍니다.

 

 

 

 

만들어진 패키지는 다음과 같습니다.

 

 

데이터 뷰어 또는 다른 데이터 대상을 이용해서 출력되는 결과를 확인해 봅시다.

 

 

 

반응형

+ Recent posts