sql >> データベース >  >> RDS >> Sqlserver

CTE を使用してマネージャーの下にあるすべての従業員を取得する

    このようなことを試すことができます

    ;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. foreachでMySQLクエリからすべての結果を返さないphp関数

    2. MySQLの自然順

    3. オペランドタイプの衝突:intは日付と互換性がありません+INSERTステートメントはFOREIGNKEY制約と競合しました

    4. PostgreSQLで列の最大表示長を制限する方法