SQL Server 获取标题和子标题下的员工列表

g6ll5ycj  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(143)

我想获取给定“负责人/员工”下的员工列表。
它应返回所有分目及其下属分目和雇员。
以下是所有员工及其职务的列表。
| 员工ID|名称名称名称|名称|主管空ID|
| - -|- -|- -|- -|
| 一个|首席执行官|一个|第0页|
| 2个|国家/地区-美国|2个|一个|
| 三个|国家/地区-英国|2个|一个|
| 四个|美国州标|三个|2个|
| 五个|美国州标B|三个|2个|
| 六个|州标-英国-C|三个|三个|
| 七个|区域标题-A|九个|六个|
| 八个|区域标题-B|九个|六个|
| 九个|区域标题-C|九个|四个|
| 10个|城市领导-A|十二|七个|
让我们问谁在“CountryHead-UK”下?
它应该返回
| 员工ID|名称名称名称|名称|头部|
| - -|- -|- -|- -|
| 三个|国家/地区-英国|2个|一个|
| 六个|州标-英国-C|三个|三个|
| 七个|区域标题-A|九个|六个|
| 八个|区域标题-B|九个|六个|
| 10个|城市领导-A|十二|七个|
如果我们询问谁应该在CEO之下,那么它应该返回everyone(对于此示例数据)

DROP TABLE IF EXISTS #A
CREATE TABLE #A (EmpID int,Name VARCHAR(MAX), Designation INT, HeadEmpID INT)
INSERT INTO #A VALUES (1,'CEO',1,0)
INSERT INTO #A VALUES (2,'CountryHead-USA',2,1)
INSERT INTO #A VALUES (3,'CountryHead-UK',2,1)

INSERT INTO #A VALUES (4,'StateHead-USA-A',3,2)
INSERT INTO #A VALUES (5,'StateHead-USA-B',3,2)
INSERT INTO #A VALUES (6,'StateHead-UK-C',3,3)

INSERT INTO #A VALUES (7,'ZoneHead-A',9,6)
INSERT INTO #A VALUES (8,'ZoneHead-B',9,6)
INSERT INTO #A VALUES (9,'ZoneHead-C',9,4)

INSERT INTO #A VALUES (10,'CityHead-A',12,7)

SELECT * FROM #A a

小提琴:https://dbfiddle.uk/YZH65Xvi

q1qsirdb

q1qsirdb1#

谢谢Larnu的提示。
跟随工作。

with cte as (
     select e.Empid, e.Name, e.Head, b.Name N1, b.Head new_boss
     from #a e
     left  join #a b on b.Empid = e.Head
     union all 
     select c.Empid, c.Name, c.new_boss, e.name, e.head
     from cte c 
     join #a e on e.Empid = c.new_boss
)

select Empid, Name, Head, N1 
from cte WHERE n1 = 'CountryHead-UK'
order by Empid, head

相关问题