sql >> Database >  >> RDS >> Sqlserver

Krijg alle medewerkers onder leiding met CTE

je kunt zoiets proberen

;WITH EmployeeTable AS 
(
SELECT 1 EmpId,0 ManagerId ,   5 Level ,'CEO' Value
UNION ALL SELECT 2,1,   4,'EMP'
UNION ALL SELECT 3,1,   4,'ORG'
UNION ALL SELECT 4,2,   3,NULL
UNION ALL SELECT 5,2,   3,NULL
UNION ALL SELECT 6,2,   2,NULL
UNION ALL SELECT 7,1,   1,NULL
UNION ALL SELECT 8,5,   0,NULL
),LevelHire AS
(
        SELECT EmpId, ManagerId,Level,Value
        FROM EmployeeTable
        WHERE EmpId = 2
        UNION ALL
        SELECT RC.EmpId,  RC.ManagerId, Lh.Level,LH.Value
        FROM LevelHire LH
        INNER JOIN [EmployeeTable] RC
        ON LH.EmpId= RC.ManagerId
)
SELECT  E.EmpId, E.ManagerId,E.Level,ISNULL(E.Value ,LH.Value) Value
FROM EmployeeTable E
    LEFT JOIN LevelHire LH
    ON E.EmpId = LH.EmpId


  1. Vergelijk de nde rij met de n+1de rij en als deze in het bereik van de nde rij ligt, druk dan n+1 rij af USNG ORACLE QUERY

  2. Functie splitsen door komma in SQL Server 2008

  3. Handleiding voor CTE in SQL Server

  4. Maak een kamerentiteit voor een tabel met een veld met het LONG-gegevenstype in Sqlite