Я извлекаю данные сотрудника из базы данных SQL Server, чтобы нарисовать орг-диаграмму. У моей компании много отделов (я думаю, что каждая компания делает). Я только хотел вытащить один конкретный отдел за раз.Динамически изменить узел супервизора на нуль
В нашей базе данных каждый начальник отдела также отчитывается перед генеральным директором или председателем. Как я могу изменить колонку reportsToEmpId
(во время выполнения) для главы отдела до NULL? Если родитель главы отдела не входит в этот отдел.
Вот моя reportsTo структура таблицы:
empId, name, reportsToEmpId, deptId
100, John, 99, 1
101, Mary, 100, 1
102, Carol, 100, 1
99, Jim, null, 2
Так как я только тянуть deptId = 1
и Jim
не dept1
. Могу ли я динамически изменять John
в колонке reportsToEmpId
до NULL
?
select fields I need
from reportsTo r
join employee e on r.empId = e.empId
join groupHightlight h on ...
where deptId=1
Я попытался использовать таблицу tmp, но это кажется слишком громоздким.
Оригинальный выход:
empId, name, reportsToEmpId, deptId
100, John, 99, 1
101, Mary, 100, 1
102, Carol, 100, 1
Вот мой ожидаемый результат: (Тем не менее, я предпочитаю не делать какие-либо изменения на исходной таблице, так как в противном случае, если я хочу, чтобы вытащить всех, кто отчитывается CEO, то я потеряли «связь» между отделами).
empId, name, reportsToEmpId, deptId
100, John, NULL, 1
101, Mary, 100, 1
102, Carol, 100, 1
Так что ждем, как выход здесь? И вы предоставили лишь ту же информацию, что и для одной из трех таблиц в вашем запросе. –
Привет, Шон, спасибо. Я обновил свой вопрос. (Я добавил ожидаемый вывод в нижней части моего вопроса :-) –