SQL-запрос: проблема каскадных запросов «менеджеров» - PullRequest
0 голосов
/ 03 марта 2011

У меня есть база сотрудников и их непосредственный менеджер.У каждой строки сотрудника есть столбец ManagerId.Если я запускаю отчет, чтобы увидеть, какие сотрудники отчитываются перед «Бобом», я получаю список сотрудников с идентификатором «Боба» в столбце ManagerId.Это хорошо для выяснения того, кто отчитывается непосредственно перед Бобом, но я хочу видеть всех, кто отчитывается перед Бобом или любого из директоров, менеджеров или супервизоров, которые отчитываются перед Бобом.

Как мне это сделать?

Редактировать 1 - Это для SQL Server 2005 / 2008. Я хотел бы, чтобы все сотрудники под руководством Боба, а не только те, кто отчитывался непосредственно перед ним.

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Кроме того, в последних версиях SQL Server это можно сделать с помощью рекурсивного выражения общих таблиц.

См. этот вопрос MSDN и ответы на него. Цитировать:

WITH EmpCTE(empid, empname, mgrid, IsRoot)
AS
(

 -- Anchor Member (AM)
 SELECT empid, empname, mgrid, CASE WHEN mgrid IS NULL THEN 1 ELSE 0 END IsRoot
 FROM Employees
 WHERE empid = @empid

 UNION ALL

 -- Recursive Member (RM)
 SELECT M.empid, M.empname, M.mgrid, CASE WHEN M.mgrid IS NULL THEN 1 ELSE 0 END
 FROM Employees AS M
  JOIN EmpCTE AS E
   ON E.mgrid = M.empid
)
SELECT * FROM EmpCTE
GO

Это даст вам отправную точку.

0 голосов
/ 03 марта 2011

Вы можете сделать это, используя иерархические запросы, если ваша база данных поддерживает это.Какую базу данных вы используете.

Для Oracle: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries003.htm

Для SQL Server (и я считаю, что синтаксис ANSI SQL также поддерживается для Oracle с 11g R2), проверьте эту ссылку.

http://msdn.microsoft.com/en-us/library/ms186243.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...