У меня есть обновление, которое должно быть выполнено. И я действительно застрял. Это классический иерархический вопрос таблицы сотрудников, но с завихрением. Пожалуйста, посмотрите на это дерево пользователей: employeesОбновление специального идентификатора в иерархической таблице сотрудников
(никакого отношения к моей проблеме, просто что-то я нашел с фотографиями 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.
Имеет ли смысл?
Вот мой КТР:
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
Для примера гораздо большей странности, демонстрируя, как создать полный путь от лорда Высокого палача (RM1) к крестьянину (EMP *), взгляните на [это] (http://stackoverflow.com/questions/ 8912992/how-to-correct-label-branch-of-a-tree-in-a-depth-first-search). – HABO