Self Join to get employee manager name

匿名 (未验证) 提交于 2019-12-03 02:59:02

问题:

Hello I have a Employee Table with following columns

Emp_id, Emp_Name and Mgr_id. 

I am trying to create a view which will list

Emp_id, Emp_name, Mgr_id and Mgr_name (by cross joining the Employee table). I tried outer join, inner join etc, but I am not able to get it right.

Any help is highly appreciated.

CREATE TABLE [dbo].[tblEmployeeDetails]( [emp_id] [bigint] NOT NULL,  [emp_name] [nvarchar](200) NULL,     [emp_mgr_id] [bigint] NULL, CONSTRAINT [PK_tblEmployeeDetails] PRIMARY KEY CLUSTERED ( [emp_id] ASC )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] ) ON [PRIMARY] 

回答1:

CREATE VIEW AS SELECT e1.emp_Id EmployeeId, e1.emp_name EmployeeName,         e1.emp_mgr_id ManagerId, e2.emp_name AS ManagerName FROM   tblEmployeeDetails e1        JOIN tblEmployeeDetails e2        ON e1.emp_mgr_id = e2.emp_id 

EDIT: Left Join will work.

CREATE VIEW AS  SELECT e1.emp_Id EmployeeId, e1.emp_name EmployeeName,          e1.emp_mgr_id ManagerId, e2.emp_name AS ManagerName  FROM   tblEmployeeDetails e1         LEFT JOIN tblEmployeeDetails e2         ON e1.emp_mgr_id = e2.emp_id 


回答2:

   SELECT b.Emp_id, b.Emp_name,e.emp_id as managerID, e.emp_name as managerName     FROM Employee b     JOIN Employee e ON b.Emp_ID = e.emp_mgr_id 

Try this, it's a JOIN on itself to get the manager :)



回答3:

    select E1.emp_id [Emp_id],E1.emp_name [Emp_name], E2.emp_mgr_id [Mgr_id],E2.emp_name [Mgr_name]  from [tblEmployeeDetails] E1 left outer join     [tblEmployeeDetails] E2     on E1.emp_mgr_id=E2.emp_id 


回答4:

Try this one.

SELECT Employee.emp_id, Employee.emp_name,Manager.emp_id as Mgr_Id, Manager.emp_name as Mgr_Name  FROM tblEmployeeDetails Employee  LEFT JOIN tblEmployeeDetails Manager ON Employee.emp_mgr_id = Manager.emp_id 


回答5:

As Jesse said, use self join:

SELECT    e.emp_id   , e.emp_name   , e.emp_mgr_id   , m.emp_name AS mgr_name  FROM [dbo].[tblEmployeeDetails] e  LEFT JOIN [dbo].[tblEmployeeDetails] m ON e.emp_mgr_id = m.emp_id 


回答6:

CREATE VIEW EmployeeWithManager AS  SELECT e.[emp id], e.[emp name], m.[emp id], m.[emp name]  FROM Employee e LEFT JOIN Employee m ON e.[emp mgr id] = m.[emp id] 

This definition uses a left outer join which means that even employees whose manager ID is NULL, or whose manager has been deleted (if your application allows that) will be listed, with their manager's attributes returned as NULL.

If you used an inner join instead, only people who have managers would be listed.



回答7:

SELECT e1.empno EmployeeId, e1.ename EmployeeName,         e1.mgr ManagerId, e2.ename AS ManagerName FROM   emp e1, emp e2        where e1.mgr = e2.empno 


回答8:

try this ..you should do LEFT JOIN to igore null values in the table

SELECT a.emp_Id EmployeeId, a.emp_name EmployeeName,          a.emp_mgr_id ManagerId, b.emp_name AS ManagerName  FROM   tblEmployeeDetails a         LEFT JOIN tblEmployeeDetails b        ON b.emp_mgr_id = b.emp_id 


回答9:

TableName :Manager  EmpId   EmpName     ManagerId 1       Monib       4  2       zahir       1  3       Sarfudding  NULL  4       Aslam       3   select e.EmpId as EmployeeId,e.EmpName as EmployeeName,e.ManagerId as ManagerId,e1.EmpName as Managername from Manager e   join manager e1 on e.ManagerId=e1.empId 


回答10:

create table abc(emp_ID int, manager varchar(20) , manager_id int)  emp_ID  manager manager_id 1       abc     NULL 2       def     1 3       ghi     2 4       klm     3 5       def1    1 6       ghi1    2 7       klm1    3  select a.emp_ID , a.manager emp_name,b.manager manager_name from abc a left join abc b on a.manager_id = b.emp_ID  Result: emp_ID  emp_name  manager_name 1       abc       NULL 2       def       abc 3       ghi       def 4       klm       ghi 5       def1      abc 6       ghi1      def 7       klm1      ghi 


回答11:

create view as  (select  e1.empno as PersonID, e1.ename as PersonName, e2.empno MANAGER_ID, e2.ename MANAGER_NAME  from  employees e1 , employees e2  where  e2.empno=e1.mgr) 


回答12:

select E1.EmpId,E1.Name,E2.Name as Manager from Employee E1 left join Employee E2 on  E1.ManagerID = E2.EmpId 


回答13:

Additionally you may want to get managers and their reports count with -

SELECT e2.ename ,count(e1.ename)  FROM employee_s e1 LEFT OUTER JOIN employee_s e2  ON e1.manager_id = e2.eid group by e2.ename; 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!