2010-08-04 89 views
1

樣品表自加入和迭代SQL

Emp Id Emp Name Manager Id 
1001 arun  1004 
1002 Bharath 1004 
1003 Chitra 1004 
1004 Devi  1005 
1005 Eli  1006 
1006 Fatima 1007 
1007 Ganesh 1008 

當我選擇經理ID 1004,應該顯示三個名字阿倫,巴拉斯,奇特拉如果我選擇1005應該顯示德維,阿倫,巴拉斯,奇特拉

僅供參考 - ManagerId與EMPId相同。

我該如何使用函數準備sql出來?

+1

什麼版本的SQL Server? – 2010-08-04 01:56:17

回答

2

如果您使用SQL Server 2005及更高版本,則可以使用公用表表達式。在這個例子中,我假設ManagerId爲null表示最高管理者。

With HumanResources As 
    (
    Select EmpId, EmpName, ManagerId, EmpName As ManagerName 
    From Employees 
    Where ManagerId Is Null 
    Union All 
    Select E.EmpId, E.EmpName, E.ManagerId, H.EmpName 
    From Employees As E 
     Join HumanResources As H 
      On H.EmpId= E.ManagerId 
    ) 
Select EmpId, EmpName, ManagerId, ManagerName 
From HumanResources 

有關更多信息,請參見Recursive Queries

+0

+1:打我吧 – 2010-08-04 01:55:36

+1

@OMG小馬 - 一切都要第一時間。 :) – Thomas 2010-08-04 01:56:58

+0

該查詢是否有效?假設僱員列EmpId,EmpName和ManagerId列,我得到「Msg 207,級別16,狀態1,行10 無效的列名'EmployeeId'。」 – LittleBobbyTables 2010-08-04 02:05:03