Другая возможность, аналогичная Тиму, но требует только одного CTE:
with numbered as (
select name, gender, row_number() over (partition by gender order by name) as rn
from the_table
)
select f.name as "Female", m.name as "Male"
from numbered f
full outer join numbered m on m.rn = f.rn and m.gender = 'Male'
where f.gender = 'Female';
При использовании полного внешнего объединения это также работает, если количество строк для каждого пола различно.
Онлайн пример