根据主键

时间:2015-05-20 00:29:30

标签: sql sql-server

  • 7.1列出每位员工的员工姓名,员工职位,经理姓名和经理职称。
  • 为结果使用明确的列别名,不要在列表中排除任何员工。

我是SQL新手所以请耐心等待。我设法得到每个员工的输出列表,他们的职位,以及他们向员工报告的员工ID(也就是他们的经理)。我无法为我的生活找出如何正确添加两个额外的列(ManagerNameManagerJobTitle)以及必要的正确信息。

到目前为止,这是我的查询。

Select (FirstName + ' ' + LastName) as EmployeeName, Title as JobTitle, ReportsTo
From Employees E
Order By ReportsTo

2 个答案:

答案 0 :(得分:1)

您没有显示您的表的任何架构,但是从您的查询中我可以看到您缺少与管理器表的连接,从那里可能应该来的那两列。

编辑:好的,现在我明白了。员工表与自身相关。你没有为表格指定PK,所以我假设员工有一个Id。如果密钥是另一列,只需在下面的查询中进行更改:

Select (E FirstName + ' ' + E.LastName) as EmployeeName, 
      E.Title as JobTitle,           
      (R.FirstName + ' ' + R.LastName) as 'ManagerName', 
      R.Title as 'ManagerTitle'
From Employees E
  LEFT JOIN 
     Employees R ON E.ReportsTo = R.Id
Order By ReportsTo

修改2 :从INNER JOIN更改为LEFT JOIN,因为员工无需经理。

答案 1 :(得分:0)

Select (E.FirstName + ' ' + E.LastName) as EmployeeName, E.Title as JobTitle, mgr.ReportsTo, (mgr.FirstName + ' ' + mgr.LastName) as ManagerName, mgr.Title as MamagerJobTitle
From Employees E
Left join Employees mgr on E.EmployeeID = mgr.ReportsTo
Order By ReportsTo

注意:根据我的理解,ReportsTo列有employeeID,他们向任何管理员报告,如果没有,请用mgr替换该列.ReportsTo