Nỗ lực của bạn bằng cách sử dụng LEAD
sẽ không hoạt động vì nó không tổng hợp tất cả các cấp trước đó và ID của nó phải tuần tự.
Giải thích hệ thống phân cấp đầy đủ cho từng nhân viên trước để mỗi nhân viên được bao gồm một lần trên mỗi cấp phân cấp:
;WITH cte
AS
(
SELECT e.ID, e.Name, e.ID as sub_ID
FROM @Employees e
-- no WHERE-condition to get all employees
UNION ALL
SELECT
c.ID, c.Name -- keep the initial employee
,e.ID as sub_ID
FROM @Employees e
INNER JOIN cte c ON c.sub_ID = e.ParentID
)
SELECT
c.ID
,c.Name
-- parent level
,sum(case when c.id = s.EmployeeID then s.Quantity else 0 end) AS ParentSumSales
-- child level
,sum(case when c.id <> s.EmployeeID then s.Quantity else 0 end) AS ChildSumSales
FROM cte c
LEFT JOIN @Sales as s
ON s.EmployeeID = c.sub_ID
group by c.Name, c.id