我创建了下面列表中显示的场景,以便您更清楚地理解我的问题。
我想开发一个旋转光标,使我能够找到组织金字塔底部任何代理的最高领导者。
考虑好像您拥有的唯一信息是下面列表中显示的每个人的直接上线。你能帮助我开发一个查询,使用sql游标检索每个代理的最高领导者的名字和staff_id吗?
然后我会尝试为我的公司开发一个光标,它有一个类似的员工组织,但更复杂。仅使用游标或循环查询非常感谢。
Staff_id Name Title Upline Upline_id
-------- ------- ------------------- ----------- ---------
1 Peter Agent Fred 10
2 Paul Agent Fred 10
3 Michael Agent Fred 10
4 George Agent Rick 11
5 Will Agent Rick 11
6 Jeff Agent Rick 11
7 Mark Agent Deon 12
8 Alberto Agent Deon 12
9 Charles Agent Deon 12
10 Fred Leader Aaron 13
11 Rick Leader Zack 14
12 Deon Leader Brown 15
13 Aaron General Manager Milton 16
14 Zack General Manager Nancy 17
15 Brown General Manager Nick 18
16 Milton District Manager Ken 19
17 Nancy District Manager Miller 20
18 Nick District Manager Tad 21
19 Ken Top Leader Null Null
20 Miller Top Leader Null Null
21 Tad Top Leader Null Null
答案 0 :(得分:0)
对于像这样的层次结构,因为Lamak指出递归CTE是最好的方法。
WITH subordinates AS
(
SELECT mt.name, mt.upline, mt.title
FROM myTable mt
WHERE Staff_id = 11
UNION ALL
SELECT mt2.name, mt2.upline, mt2.title
FROM subordinates s
INNER JOIN myTable mt2
ON mt2.upline = s.name
)
SELECT s.name, s.upline, s.title
FROM subordinates
此查询将获取Rick的所有下属。
但是,正如您所看到的,我必须加入名称,而上线列实际上应该包含工作人员的ID而不是名称。这样可以避免人员名称存在两次的问题,这将显示层次结构。