我的表格包含empid
,name
,salary
,hiredate
,position
和supervisor
(其中包含{{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)
)
我尝试了这个,但它不起作用。谁知道如何做到聪明?
答案 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)
;