Вам лучше с условной агрегацией. Но вам нужно перечислить значения для их поворота:
select p.FirstName, p.LastName, Email, Phone, p.Zip
from Mother.dbo.People p join
(select PeopleId,
max(case when seqnum = 1 then email end) as email1,
max(case when seqnum = 2 then email end) as email2,
max(case when seqnum = 3 then phone end) as email3,
max(case when seqnum = 1 then phone end) as phone1,
max(case when seqnum = 2 then phone end) as phone2,
max(case when seqnum = 3 then email end) as phone3
from ((select pe.PeopleID, pe.email, null as phone,
row_number() over (partition by pe.PeopleID order by pe.PeopleEmailID) as seqnum
from Mother.dbo.PeopleEmail pe
) union all
(select pp.PeopleID, null as email, pp.phone,
row_number() over (partition by pp.PeopleID order by pp.PeoplePhoneId) as seqnum
from Mother.dbo.PeopleEmail pe
)
) em
group by PeopleId
) em
on p.PeopleID = em.PeopleEmailID
Where p.Zip IN ('34201', '34202', '34203', '34205', '34207', '34208');
EDIT:
Или вы можете сформулировать это как:
select p.FirstName, p.LastName, Email, Phone, p.Zip
max(case when seqnum = 1 then email end) as email1,
max(case when seqnum = 2 then email end) as email2,
max(case when seqnum = 3 then phone end) as email3,
max(case when seqnum = 1 then phone end) as phone1,
max(case when seqnum = 2 then phone end) as phone2,
max(case when seqnum = 3 then email end) as phone3
from ((select pe.PeopleID, pe.email, null as phone,
row_number() over (partition by pe.PeopleID order by pe.PeopleEmailID) as seqnum
from Mother.dbo.PeopleEmail pe
) union all
(select pp.PeopleID, null as email, pp.phone,
row_number() over (partition by pp.PeopleID order by pp.PeoplePhoneId) as seqnum
from Mother.dbo.PeopleEmail pe
)
) em join
Mother.dbo.People p
on p.PeopleID = em.PeopleEmailID
where p.Zip in ('34201', '34202', '34203', '34205', '34207', '34208');