【发布时间】:2014-04-28 22:17:53
【问题描述】:
我在SQL Server 2005 中有以下员工 - 经理层次结构表。
以下是我想要实现的目标
业务逻辑:
-- 有效的管理者应该有一个部门
-- 有效经理是层次结构中最近的具有部门的经理
-- Effective Department 是 Effective Manager 的部门
我已将CTE 用于此类递归场景。示例SQL SERVER – Simple Example of Recursive CTE
但我的情况比简单地找到最近的经理有更多的条件。
如何修改此 CTE 以获得预期结果?
查询
DECLARE @Emploee TABLE (EmpID INT, EmpName VARCHAR(50), Dept VARCHAR(5), Manager INT)
INSERT INTO @Emploee VALUES (1, 'A', NULL,NULL)
INSERT INTO @Emploee VALUES (2, 'B', 'D100',NULL)
INSERT INTO @Emploee VALUES (3, 'C', 'D101',2)
INSERT INTO @Emploee VALUES (4, 'D', 'D102',1)
INSERT INTO @Emploee VALUES (5, 'E', NULL,2)
INSERT INTO @Emploee VALUES (6, 'F', 'D103',5)
INSERT INTO @Emploee VALUES (7, 'G', NULL,6)
INSERT INTO @Emploee VALUES (8, 'H', 'D104',7)
SELECT *
FROM @Emploee
WHERE Manager IS NOT NULL
【问题讨论】:
-
嗯 - 基本上 - 你只是举个例子,然后在 CTE 的“源”部分(UNION 之前的前半部分)中扩展 FROM 和 WHERE,然后在之后扩展 ON 子句CTE 的“第二”部分(联合之后的部分)中的 INNER JOIN。在递归功能之后,一些规则可能适用——这意味着您从 CTE 中实际选择的位置。
标签: sql sql-server