Вот переписать ваш текущий запрос, который возвращает имя менеджера менеджера бухгалтеров, переписанное с использованием INNER JOIN (синтаксис ANSI-92)
SELECT
MM.EmployeeFirstName,
MM.EmployeeLastName
FROM EMPLOYEE_t M
INNER JOIN EMPLOYEE_t E
ON E.ManagerID = M.EmployeeID
INNER JOIN EMPLOYEE_t MM
ON M.ManagerId = MM.EmployeeID
WHERE E.EmployeeJobTitle = 'Accountant'
GROUP BY MM.EmployeeFirstName, MM.EmployeeLastName
Использование GROUP BY можно заменить ключевым словом DISTINCT в верхней части запроса, чтобы возвращать каждого менеджера только один раз, например,
SELECT DISTINCT
MM.EmployeeFirstName,
MM.EmployeeLastName
FROM EMPLOYEE_t M
INNER JOIN EMPLOYEE_t E
ON E.ManagerID = M.EmployeeID
INNER JOIN EMPLOYEE_t MM
ON M.ManagerId = MM.EmployeeID
WHERE E.EmployeeJobTitle = 'Accountant'
Кроме того, если не у всех менеджеров бухгалтера есть менеджеры, вы можете вернуть имя менеджера самого высокого уровня, который вы можете найти. В этом случае вы можете использовать ISNULL()
и LEFT JOIN
для возврата правильного имени менеджера верхнего уровня, т.е.
SELECT DISTINCT
ISNULL(MM.EmployeeFirstName, M.EmployeeFirstName) as EmployeeFirstName,
ISNULL(MM.EmployeeLastName, M.EmployeeLastName) as EmployeeLastName
FROM EMPLOYEE_t M
INNER JOIN EMPLOYEE_t E
ON E.ManagerID = M.EmployeeID
LEFT JOIN EMPLOYEE_t MM
ON M.ManagerId = MM.EmployeeID
WHERE E.EmployeeJobTitle = 'Accountant'