Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận tất cả nhân viên dưới quyền quản lý với CTE

bạn có thể thử một cái gì đó như thế này

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải quyết cơ sở dữ liệu SQL Server bị kẹt trong vấn đề chế độ nghi ngờ một cách dễ dàng

  2. SQL Server 2005 vấn đề hiệu suất thủ tục được lưu trữ

  3. SQL Server 2005 Lấy ngày đầu tiên và ngày cuối cùng cho bất kỳ tháng nào trong năm bất kỳ

  4. Sử dụng thuộc tính nhiều lần trong truy vấn FOR XML Path T-SQL có cùng tên phần tử

  5. GIỮA Toán tử logic trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 124