Try this:
DECLARE @Table TABLE (
[Employee] varchar(20),
[Week] int,
[Hours_Worked] int,
[Bonus_Amount] money
);
INSERT INTO @Table ([Employee], [Week], [Hours_Worked], [Bonus_Amount])
VALUES
('Employee 1', 1, 40, 200), ('Employee 1', 1, 40, 500), ('Employee 1', 1, 40, 600),
('Employee 1', 2, 39, 300), ('Employee 1', 2, 39, 200), ('Employee 1', 2, 39, 800),
('Employee 2', 1, 35, 2000), ('Employee 2', 1, 35, 200),
('Employee 2', 2, 10, 500), ('Employee 2', 2, 10, 300);
SELECT
p.[Employee],
[Week],
[Hours_Worked],
STUFF(
(
SELECT ',' + '$' + CAST([Bonus_Amount] AS varchar(10))
FROM @Table
WHERE [Employee] = p.[Employee] AND [Week] = p.[Week] AND [Hours_Worked] = p.[Hours_Worked]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),
1,
1,
''
) AS [Bonus_Amount],
CAST(SUM([Bonus_Amount]) / [Hours_Worked] AS decimal(5, 2)) AS [Average]
FROM @Table AS p
GROUP BY p.[Employee], [Week], [Hours_Worked];
GO
Output: