2010-10-04 12 views
5

Digamos que tengo la siguiente tablasql función recursiva - para encontrar gerentes

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

Básicamente el requisito es para tirar todos los gerentes bajo el user_id que está buscando. Así, por ejemplo, si envío 'Linda', entonces debe devolverme:

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

o si envío 'Marca', entonces yo debería volver:

Steve 

He oído de la función recursiva pero no estoy seguro de cómo hacer esto. Cualquier ayuda sería apreciada.

Respuesta

6

Uso:

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 

conjunto de resultados:

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

Scripts:

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

Gracias Esto funciona perfectamente, pregunta rápida. ¿Hay alguna forma de poner los resultados en una matriz para que pueda usarlo en mi declaración de selección – Jacob

+0

@Jacob: puede unirse al nombre del CTE, como lo haría para cualquier tabla o vista –

Cuestiones relacionadas