Then you have multiple options:
Preaggregate using a derived table or CTE:
SELECT W.ID,
W.Group,
SUM( WD.Payment) AS TotalPayment,
SUM( W.Invoice) AS TotalInvoice
FROM Widget W
JOIN (SELECT iWD.ID,
SUM( iWD.Payment) AS Payment
FROM WidgetDetail AS iWD
GROUP BY iWD.ID) AS WD ON W.ID = WD.ID
GROUP BY W.[Group];
WITH AggregatedWidgetDetails AS(
SELECT iWD.ID,
SUM( iWD.Payment) AS Payment
FROM WidgetDetail AS iWD
GROUP BY iWD.ID
)
SELECT W.ID,
W.Group,
SUM( WD.Payment) AS TotalPayment,
SUM( W.Invoice) AS TotalInvoice
FROM Widget W
JOIN AggregatedWidgetDetails AS WD ON W.ID = WD.ID
GROUP BY W.[Group];
Use CROSS APPLY (this is usually slower).
SELECT W.ID,
W.Group,
SUM( WD.Payment) AS TotalPayment,
SUM( W.Invoice) AS TotalInvoice
FROM Widget W
CROSS APPLY (SELECT SUM( iWD.Payment) AS Payment
FROM WidgetDetail AS iWD
WHERE W.ID = iWD.ID) AS WD ON W.ID = WD.ID
GROUP BY W.[Group];
Or use a small hack that might have some problems with rounding.
SELECT W.Group,
SUM( WD.Payment) AS TotalPayment,
SUM( W.Invoice) / COUNT(*) AS TotalInvoice
FROM Widget W
JOIN WidgetDetail WD ON W.ID = WD.ID
GROUP BY W.[Group];