Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL:在同一个表上构建层次结构和嵌套查询_Sql Server_Nested_Hierarchy - Fatal编程技术网

Sql server SQL:在同一个表上构建层次结构和嵌套查询

Sql server SQL:在同一个表上构建层次结构和嵌套查询,sql-server,nested,hierarchy,Sql Server,Nested,Hierarchy,我试图通过在MS SQL Server 2014中的同一个表上嵌套查询来构建层次结构。 举一个我正在努力实现的例子: 我有一个包含以下列的“employees”表: [ID],[First Name],[Last Name],[ReportsTo] {1},{John},{Doe},{2} {2},{Mary},{Miller},{NULL} 我试图构建一个语句,在这里我将自己加入到employees表中,在这里我构建了一个层次结构,老板在上面 预期结果: [Employee],[Boss

我试图通过在MS SQL Server 2014中的同一个表上嵌套查询来构建层次结构。 举一个我正在努力实现的例子:

我有一个包含以下列的“employees”表:

[ID],[First Name],[Last Name],[ReportsTo]

{1},{John},{Doe},{2}

{2},{Mary},{Miller},{NULL}
我试图构建一个语句,在这里我将自己加入到employees表中,在这里我构建了一个层次结构,老板在上面

预期结果:

[Employee],[Boss]

{Miller,Mary},{NULL}

{Doe, John},{Miller,Mary}
如果这是一个愚蠢的问题,我很抱歉,但是我无法创建一个有效的嵌套查询

你能帮我一下吗


提前非常感谢

根据预期结果,您基本上想要的似乎是一份员工名单。让我们从这个开始:

SELECT LastName, FirstName, ReportsTo FROM Employees
这将为您提供一个列表,这样您就拥有了要查找的对象。但你需要填写更多的数据。您希望按照
reports to
操作,并显示该记录指向的数据。这将完全按照外键指向另一个表的方式进行。(与同一个表的唯一区别是必须在查询中使用表别名,因为要包含同一个表两次。)

让我们从加入表格开始:

SELECT e.LastName, e.FirstName, e.ReportsTo
FROM Employees e
  LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID
结果应该仍然相同,但现在您有更多的数据可供选择。因此,您可以将新列添加到
SELECT
子句中:

SELECT
  e.LastName AS EmployeeLastName,
  e.FirstName AS EmployeeFirstName,
  b.LastName AS BossLastName,
  b.FirstName AS BossFirstName
FROM Employees e
  LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID

它和其他任何表一样是一个联接,只是碰巧是同一个表的联接。

层次结构可以有多深?也就是说,一个老板自己能有一个老板吗?三个层次就足够了。感谢您的快速回答。您所显示的期望结果集仅显示每位员工及其直属经理。你需要比这更复杂的东西吗?