auto

2016-09-24 1 views
-1

opération JOIN J'ai une table des employés contient employeeID, name et ManagerID - 3 colonnes, je veux écrire une requête pour afficher name, managerName et level, le patron n'a pas managerID, son managerID is null.
Voir ci-dessous structure de la tableauto

enter image description here

CREATE TABLE #employee (
    EmployeeID int, 
    [Name] nvarchar(50), 
    ManagerID int 
) 

INSERT INTO #employee VALUES 
(1,'Tom',2), 
(2,'Josh',NULL), 
(3,'Mike',2), 
(4,'John',3), 
(5,'Pam',1), 
(6,'Mary',3), 
(7,'James',1), 
(8,'Sam',5), 
(9,'Simon',1) 

l'effet que je veux:

enter image description here

Comment puis-je écrire la requête SQL?

+4

SQL Server ou Oracle? C'est à différents SGBD. Veuillez préciser. – gofr1

+1

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

supposons simplement que ce problème peut exister dans SQL Server et Oracle. – user2575502

Répondre

1

Dans SQL Server vous pouvez le faire avec CTE récursive:

;WITH rec AS (
SELECT EmployeeID, 
     [Name], 
     ManagerID, 
     1 as [Level] 
FROM employee 
WHERE ManagerID IS NULL 
UNION ALL 
SELECT e.EmployeeID, 
     e.[Name], 
     e.ManagerID, 
     r.[Level] + 1 
FROM employee e 
INNER JOIN rec r 
    ON e.ManagerID = r.EmployeeID 
) 

SELECT r.[Name] as Employee, 
     COALESCE(e.[Name],'Super Boss') as Manager, 
     r.[Level] 
FROM rec r 
LEFT JOIN employee e 
    ON e.EmployeeID = r.ManagerID 

Sortie:

Employee Manager  Level 
Josh  Super Boss 1 
Tom   Josh  2 
Mike  Josh  2 
John  Mike  3 
Mary  Mike  3 
Pam   Tom   3 
James  Tom   3 
Simon  Tom   3 
Sam   Pam   4