This I think can be solved by using a Common Table Expression.
Check this TIP / TRICK -
Common Table Expression to find all related nodes[
^]
I modified the script attached with the TIP and added the 'Side' column and modified the CTE query and I think it works.. But am not sure since your example inputs are shown as a smiley(!) in the question.. Given below is the CTE I wrote..
Let me know if this works..
<pre>
DECLARE @EmpId INT;
SELECT @EmpId = 5;
WITH Parent AS
(
SELECT HE.EmpId, HE.EmpName, HE.EmpAge, HE.ManagerID, HE.Side
FROM EmpMLM HE
WHERE HE.EmpId = @EmpId
UNION ALL
SELECT HE.EmpId, HE.EmpName, HE.EmpAge, HE.ManagerID , HE.Side
FROM EmpMLM HE INNER JOIN Parent
On HE.EmpId = Parent.ManagerID
WHERE
HE.EmpId != Parent.EmpId
),
Children
AS
(
SELECT * FROM Parent
UNION ALL
SELECT HE.EmpId, HE.EmpName, HE.EmpAge, HE.ManagerID , HE.Side
FROM EmpMLM HE
INNER JOIN Children ON HE.ManagerID = Children.EmpId
WHERE
HE.EmpId != Children.EmpId
)
SELECT SIDE , COUNT(MLM.Side) FROM
(
SELECT * FROM Parent
UNION
SELECT * FROM Children
) MLM
GROUP BY Side