如果主管也在员工表中,有没有人知道如何列出所有主管的empid和名称?

时间:2013-12-04 18:36:06

标签: sql sql-server sql-server-2008 tsql

我的表格包含empidnamesalaryhiredatepositionsupervisor(其中包含{{1}而不是名字)。如何列出所有主管的empid和名称?

输出必须包含列empid(以及它们的empid列表)及其名称。这是用于创建supervisor表的create语句:

Employee

我尝试过使用带语句和计数的各种语句,但它们似乎不起作用。

/* Create table Employee */
IF OBJECT_ID('Employee', 'U') IS NOT NULL
  DROP TABLE Employee
GO
CREATE TABLE Employee (
emp_id NCHAR(5), 
name NVARCHAR(20), 
position NVARCHAR(20),
hire_date DATETIME,
salary MONEY, 
bcode NCHAR(3),
supervisor NCHAR(5)
)

我尝试了这个,但它不起作用。谁知道如何做到聪明?

3 个答案:

答案 0 :(得分:2)

你必须自己加入桌子:

select a.name, a.position, a.hiredate, a.salary, a.supervisorid, 
isnull(b.name, '') as SupervisorName 
from EmployeeTable a 
left join EmployeeTable b 
on a.SupservisorID=b.ID

左连接将确保返回没有主管的员工,如果您希望在这些情况下使用isnull(b.name, '<NONE>')之外的其他内容作为值,则可以使用NULL

答案 1 :(得分:0)

SELECT e.empid  ,ISNULL(b.name, 'No supervisor') SupervisorName 
FROM employee e LEFT JOIN  employee b
ON e.supervisorid = b.empid

内部联接将忽略没有主管的人,使用左联接来获得所有员工

答案 2 :(得分:0)

如果您只想要主管,则只需选择在emp_id列中找到supervisor值的行:

SELECT
  SupervisorID   = emp_id,
  SupervisorName = name
FROM dbo.Employee
WHERE emp_id IN (SELECT supervisor FROM dbo.Employee)
;