하지 않고 여러 데이터 세트를 결합 :
SQL Server는 세 개의 테이블 따, TB, TC 감안할 때 중복 데이터
Ta(ID, Field1)
Tb(ID, Field2)
Tc(ID, Field3)
주어진 데이터 예 :
Ta
ID Field1
---------
1 A
1 B
Tb
ID Field2
---------
1 C
1 D
2 E
Tc
ID Field3
---------
1 F
2 G
2 H
질문 : 어떻게이 가입하실 수 있습니다 돌려주는 데이터 :
ID Field1 Field2 Field3
-----------------------
1 A C F
1 B D NULL
2 NULL E G
2 NULL NULL H
외부 조인을 사용하여이 작업을 수행 할 수 있다고 생각했지만 그럴 것 같지 않습니다. 중복 행없이 모든 정보를 다시 가져 오는 한 그룹화 순서는 중요하지 않습니다.
명확히하기. 결과 집합이 최소 행 수의 모든 데이터를 반환하는 한 실제로 어떤 조합을 가져야할지 신경 쓰지 않습니다. 여기에 내가하려고하는 것에 대한보다 현실적인 예가 있습니다 :
사람이 있다면 John에게 전화하십시오. 하지만, 내가 말했듯이
select coalesce(ta.id, tb.id, tc.id), ta.field1, tb.field2, tc.field3
from (select ta.*, row_number() over (partition by id order by (select NULL)) as seqnum
from ta
) ta full outer join
(select tb.*, row_number() over (partition by id order by (select NULL)) as seqnum
from tb
) tb
on ta.id = tb.id and
ta.seqnum = tb.seqnum
(select tc.*, row_number() over (partition by id order by (select NULL)) as seqnum
from tc
) tc
on coalesce(ta.id, tb.id) = tc.id and
coalesce(ta.seqnum, tb.seqnum) = tc.seqnum
group by coalesce(ta.id, tb.id, tc.id),
coalesce(ta.seqnum, tb.seqnum, tc.seqnum)
order by 1, 2
:
PID Email Tel
----------------------
John [email protected] 011
John [email protected] 022
John [email protected] NULL
입니까? – Lamak
'1 A D F'은 어떻습니까? 그리고'1 B C F'? 왜 그걸 돌려 보내지 않는 거지, 네가 돌아 오는 길에서 분명히 빠져있다. 그렇지 않니? 당신이 반응하기 전에, 멈추고 생각해보십시오, 그리고 아마 당신은 당신의 요구 사항에 대한 실제 문제를 깨닫게 될 것입니다. –
당신의 조합은 원래 테이블에있는 행의 순서에 의존하는 것처럼 보입니다. SQL (및 SQL Server)에서 테이블의 행 순서는 지정되지 않습니다. 주문을 결정할 행 번호 또는 ID 열 또는 날짜가 있습니까? –