LEAD
. का उपयोग करने का आपका प्रयास काम नहीं करेगा क्योंकि यह पिछले सभी स्तरों का योग नहीं है और इसकी आईडी अनुक्रमिक होनी चाहिए।
पहले प्रत्येक कर्मचारी के लिए पूर्ण पदानुक्रम का विस्फोट करें जैसे कि प्रत्येक कर्मचारी को पदानुक्रम स्तर के अनुसार एक बार शामिल किया जाता है:
;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