LEAD
を使用した試み 以前のすべてのレベルを合計するわけではなく、ID が連続している必要があるため、機能しません。
各従業員が階層レベルごとに 1 回含まれるように、最初に各従業員の完全な階層を展開します。
;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
プレ>