• 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];

    Luis C.
    General Disclaimer:
    Are you seriously taking the advice and code from someone from the internet without testing it? Do you at least understand it? Or can it easily kill your server?

    How to post data/code on a forum to get the best help: Option 1 / Option 2