2016-05-24 12 views
1

versuchen, eine rekursive CTE zu tun, um eine org Char-Hierarchie aus der Tabelle, die ich unten, eine Art von ratlos und hoffe auf Hilfe anzuzeigen.CTE zur Anzeige der Organisationshierarchie?

DECLARE @Org TABLE(
    EmployeeID smallint NOT NULL 
    ,ManagerID smallint NULL 
    ,LoginName varchar(50) 
); 

INSERT @Org 
VALUES (1,null,'Peter'),(2,1,'Larry'),(3,1,'John'), 
     (4,1,'Lisa'), (5,2,'Linda'),(6,3,'Nathan'), 
     (7,3,'Tom') , (8,3,'Terry'),(9,4,'Lou'), 
     (10,7,'David'), (11,9,'Ken') ,(12,9,'Robert'); 

Der Versuch, es zu erhalten, um wie

EmployeeID LoginName ManagerID LEVEL 
    1   Peter  NULL 0 
    2   Larry  1  1 
    3   John  1  1 
    4   Lisa  1  1 
    9   Lou   4  2 
    6   Nathan  3  2 
    7   Tom   3  2 
    8   Terry  3  2 
    5   Linda  2  2 
    10   David  7  3 
    11   Ken   9  3 
    12   Robert  9  3 
+0

Th Es ist kein CTE. Gibt es mehr Code zu sehen? Möchten Sie nur @Org wie Ihr Tabellenbeispiel ausgeben? Woher kommt "Level"? –

+0

Also gibt es diese 'SELECT EmployeeID, LoginName, ManagerID,' 'AS' LEVEL 'von @ Org', aber keine Ahnung, woher 'LEVEL' zu bekommen. –

Antwort

1

Abfrage

;with CTE as 
(
    select EmployeeID 
     ,ManagerID 
     ,LoginName 
     ,0 as Level 
    from @Org Where ManagerID IS NULL 

    union all 

    select T.EmployeeID 
     ,T.ManagerID 
     ,T.LoginName 
     ,C.Level + 1 
    from @Org as T 
    inner join CTE C 
     on T.ManagerID = C.EmployeeID 
) 
select * 
from CTE 
Order by EmployeeID 

Ergbnisssatzes

╔════════════╦═══════════╦═══════════╦═══════╗ 
║ EmployeeID ║ ManagerID ║ LoginName ║ Level ║ 
╠════════════╬═══════════╬═══════════╬═══════╣ 
║   1 ║ NULL  ║ Peter  ║  0 ║ 
║   2 ║ 1   ║ Larry  ║  1 ║ 
║   3 ║ 1   ║ John  ║  1 ║ 
║   4 ║ 1   ║ Lisa  ║  1 ║ 
║   5 ║ 2   ║ Linda  ║  2 ║ 
║   6 ║ 3   ║ Nathan ║  2 ║ 
║   7 ║ 3   ║ Tom  ║  2 ║ 
║   8 ║ 3   ║ Terry  ║  2 ║ 
║   9 ║ 4   ║ Lou  ║  2 ║ 
║   10 ║ 7   ║ David  ║  3 ║ 
║   11 ║ 9   ║ Ken  ║  3 ║ 
║   12 ║ 9   ║ Robert ║  3 ║ 
╚════════════╩═══════════╩═══════════╩═══════╝ 
+0

ok, gut, dass du es hast. Dies half mir zu verstehen, wonach er suchte. Gut gemacht! –

Verwandte Themen