If you really want to imply the PIVOT operator and ContactValue does not contain anything else, then consider this approach too:
select CustNumber, Phone1, Phone2, Email
from
(
select CustNumber, ContactValue, concat('Phone', row_number() over (partition by CustNumber order by ContactType)) as k
from mytable
where ContactValue not like '%@%'
union all
select CustNumber, ContactValue, 'Email'
from mytable
where ContactValue like '%@%'
) t
pivot
(
max(ContactValue) for k in (Phone1, Phone2, Email)
)
u
You can easily adjust it for more phone and email columns.