Uma maneira de abordar isso é a agregação condicional:
select min(ID), SIN,
max(case when type = 'phone' then contact end) as phone,
max(case when type = 'email' then contact end) as email
from people t
group by sin;
select min(ID), SIN,
max(case when type = 'phone' then contact end) as phone,
max(case when type = 'email' then contact end) as email
from people t
group by sin;
O tipo ou nome do namespace 'oracle' não pôde ser encontrado erro
Como automatizar a replicação e failover do PostgreSQL 12 com repmgr – Parte 2
Relatório de tendências do PostgreSQL 2019:nuvem privada versus nuvem pública, migrações, combinações de banco de dados e principais motivos usados
Como migrar do MSSQL para o MySQL