@Nosezz

Как верно написать рекурсивный запрос sql?

Всем привет, пытаюсь вывести список всех сотрудников, но чтобы было в виде:
Менеджер - сотрудники, менеджер - сотрудники (одним списком).
Пока получилось только двумя столбцами, но нужен в один. На примере слева вид таблицы, справа итог который хочу получить.
6686ca5d35d64194670928.jpeg
Моя попытка.-.
SELECT
e.name as Employee,
m.name as Manager
FROM
employees as e
LEFT JOIN employees as m
ON e.managerid = m.employeeid
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
То что ты хочешь - это excel-специфично, его формат отображения. Такого ты не получишь.
Есть несколько вариантов как это можно сделать в один столбец.

1. В единственной строке отображай все ID

select e.manager_id::text || ' - ' || array_agg(id)::text
from employees as e
where e.manager_id is not null
group by e.manager_id
order by e.manager_id;


2. Добавляй паддинг для каждой строки (пустые строки)
with manager_groups as (
	select manager_id::text, array_agg('          ' || id::text) as ids
	from employees as e
	where e.manager_id is not null
	group by e.manager_id
	order by e.manager_id
)
select 
	x.id
from (
	select unnest(array_prepend(manager_id, ids)) as id
	from manager_groups
) as x;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы