SELECT
Employees.Surname,
Subdiv.Name
FROM
Employees
LEFT JOIN Subdiv on Employees.ID_emp=Subdiv.ID
INNER JOIN
(select distinct * from Subdiv) sel1 ON sel1.ID= Subdiv.ID_Parent
INNER JOIN
(select distinct * from Subdiv) sel2 ON sel2.ID= sel1.ID_Parent
INNER JOIN
(select distinct * from Subdiv) sel3 ON sel3.ID= sel2.ID_Parent
WHERE
(Subdiv.ID=@id OR sel1.ID=@id OR sel2.ID=@id OR sel3.ID=@id)
Рекурсивная таблица
(ID_Parent ссылается на ID родительской строки).
По этой таблице програмно формируется дерево подразделений. Количество "веток" в каждом узле дерева разное.
Пользователь выбирает один узел дерева, т.е. одну строку таблицы подразделений. Создается параметр @id, который равен ID выбранной строки.
Необходимо вывести всех служащих, которые работают в выбранном подразделении.
Вот как это было реализовано:
1). Програмно подсчитываю максимальное количество веток в узле;
2). В зависимости от этого количества формирую запрос. Например для узла с максимальным количеством веток = 3 запрос будет выглядеть следующим образом:
Код:
Все остальные запросы создаються аналогично.
Теперь в чем проблема:
при максимальном количестве веток больше 2-х отображаються не все записи. Может быть логика запроса в чем-то не верна?:confused:
Цитата: Balda
Может быть логика запроса в чем-то не верна?:confused:
Попробуйте выполнить ту же задачу с использованием хранимки.
Имеется в виду программный обход дерева и сбор данных во временную таблицу.
MS SQL Server 2005.