我有一个员工及其直接经理的数据库。每个员工行都有一个ManagerId列。如果我运行报告以查看哪些员工向“Bob”报告,我会在ManagerId列中获得具有“Bob's”ID的员工列表。这对于找出谁直接向Bob报告但是我想看到向Bob报告的每个人或向Bob报告的任何董事,经理或主管都很好。
我该怎么做?
编辑1 - 这适用于SQL Server 2005/2008。我希望Bob下的所有员工,而不仅仅是那些直接向他报告的员工。
答案 0 :(得分:0)
如果您的数据库支持分层查询,则可以执行此操作。您使用的是哪个数据库。
对于Oracle:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/queries003.htm
对于SQL Server(我相信来自11g R2的Oracle也支持ANSI SQL语法),请查看此链接。
答案 1 :(得分:0)
或者,在SQL Server的最新版本中,您可以通过递归公用表表达式完成此操作。
请参阅this MSDN question及其答案。引用:
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
那会给你一个起点。