2010-10-04 58 views
5

可以說我有如下表SQL遞歸函數 - 找經理

User_ID Manager_ID 
--------------------- 
Linda  Jacob 
Mark   Linda 
Kevin  Linda 
Steve  Mark 
John   Kevin 

基本要求是拉你正在尋找USER_ID下的所有管理人員。因此,舉例來說,如果我在「琳達」送那麼它應該返回我:

'Mark', 'Kevin', 'Steve', 'John' 

,或者如果我在「馬克」送那麼它應該返回我:

Steve 

我聽說遞歸函數但我不確定如何做到這一點。任何幫助,將不勝感激。

回答

6

用途:

WITH hieararchy AS (
    SELECT t.user_id 
    FROM YOUR_TABLE t 
    WHERE t.manager_id = 'Linda' 
    UNION ALL 
    SELECT t.user_id 
    FROM YOUR_TABLE t 
    JOIN hierarchy h ON h.user_id = t.manager_id) 
SELECT x.* 
    FROM hierarchy x 

結果集:

user_id 
-------- 
Mark 
Kevin 
John 
Steve 

腳本:

CREATE TABLE [dbo].[YOUR_TABLE](
[user_id] [varchar](50) NOT NULL, 
[manager_id] [varchar](50) NOT NULL 
) 

INSERT INTO YOUR_TABLE VALUES ('Linda','Jacob') 
INSERT INTO YOUR_TABLE VALUES ('Mark','Linda') 
INSERT INTO YOUR_TABLE VALUES ('Kevin','Linda') 
INSERT INTO YOUR_TABLE VALUES ('Steve','Mark') 
INSERT INTO YOUR_TABLE VALUES ('John','Kevin') 
+0

由於此作品完美,快速的問題。有沒有辦法把結果放在一個數組中,這樣我可以在我的select語句中使用它 – Jacob 2010-10-04 23:55:57

+0

@Jacob:你可以加入CTE的名稱,就像你對任何表或視圖 – 2010-10-04 23:58:28