Предполагая, что ваши результаты упорядочены по отделу, имени сотрудника, вы можете использовать функцию LAG, чтобы найти первую строку для каждого отдела.Вам нужно было бы проверить каждую строку, чтобы увидеть, имеет ли она другой отдел, чем предыдущая строка, что-то вроде этого:
SELECT CASE /* Check if there's a different department number on this row compared to the previous row */
WHEN NVL(LAG(t.dept) OVER (ORDER BY t.dept, t.emp_name),-1) <> t.dept /* If previous row is null (ie, this is the first row), use -1 as previous dept number so comparison does not fail */
THEN t.dept
END AS display_dept,
t.emp_name,
t.salary
FROM myTable t
ORDER BY t.dept, t.emp_name
Тем не менее, как уже отмечали другие, это действительно не то, что SQLпредназначен сделать;было бы намного лучше, если бы эта логика была в том, что отображает результаты запроса, чем в самом запросе.