Этот тип преобразования данных лучше всего выполнять на прикладном уровне. Но если вы хотите сделать это в SQL, вы можете использовать оконные функции - но с оговоркой, что порядок строк очень важен. Я бы предложил:
select (case when row_number() over (partition by d.department_id order by e.last_name) = 1
then d.department_name
end) as dept,
last_name
from employees e join
departments d
on d.department_id = e.department_id
group by d.department_name, e.last_name
order by d.department_name, dept nulls last;
Я также искренне сомневаюсь, что вам нужен group by
, если в таблицах нет дубликатов. Итак:
select (case when row_number() over (partition by d.department_id order by e.last_name) = 1
then d.department_name
end) as dept,
last_name
from employees e join
departments d
on d.department_id = e.department_id
order by d.department_name, dept nulls last;