У меня есть обновление, которое должно быть сделано. И я действительно застрял.
Это классический иерархический вопрос о сотрудниках, но с изюминкой.
Пожалуйста, посмотрите на это дерево пользователей:
Сотрудники
(совершенно не связано с моей проблемой, просто что-то, что я нашел с картинками Google)
Допустим, следующие идентификаторы:
RM1: EmpId 1, ParentId null
AM1: EmpId 2, ParentId 1
MGR1: EmpId 3, ParentId 2
MGR2: EmpId 4, ParentId 2
EMP1: EmpId 5, ParentId 3
EMP2: EmpId 6, ParentId 3
EMP3: EmpId 7, ParentId 4
EMP4: EmpId 8, ParentId 4
Мне нужно добавить еще один столбец, давайте назовем его parentSpecialId.
Этот идентификатор является идентификатором пользователя ниже root (AM1 и AM2).
Все пользователи ниже AM1 и AM2 должны иметь parentSpecialId, установленный для пользователя ниже root.
Что дает нам:
RM1: EmpId 1, ParentId null parentSpecialId null
AM1: EmpId 2, ParentId 1 parentSpecialId null
MGR1: EmpId 3, ParentId 2 parentSpecialId 2
MGR2: EmpId 4, ParentId 2 parentSpecialId 2
EMP1: EmpId 5, ParentId 3 parentSpecialId 2
EMP2: EmpId 6, ParentId 3 parentSpecialId 2
EMP3: EmpId 7, ParentId 4 parentSpecialId 2
EMP4: EmpId 8, ParentId 4 parentSpecialId 2
Все, что у меня есть, это CTE, который дает мне набор результатов с AM1 и AM2.
Поэтому мне нужно пройти весь путь до EMPX и обновить parentSpecialId с Id 2 для
AM1 и то же самое для всех пользователей AM2. Конечно, по динамике, в реальной жизни у меня 12 таких пользователей ниже root.
Имеет ли это смысл?
Вот мой CTE:
WITH EmpsCTE AS
(
SELECT id, parent, name, 0 AS EmployeeLevel
FROM Employee
WHERE parent = 0
UNION ALL
SELECT e.id, e.parent, e.name, EmployeeLevel + 1
FROM EmpsCTE AS p
JOIN Employee AS e ON e.parent = p.id
)
SELECT id, parent, name, EmployeeLevel
From EmpsCTE where EmployeeLevel = 1
О, и я использую Sql server 2008 R2