Этот следующий скрипт поможет вам получить требуемые результаты. Я использовал RANK в сценарии, чтобы выбрать одного или нескольких клиентов с максимальной суммой, отправленной в страну.
WITH Customer(CustomerId,FirstName,LastName)
AS
(
SELECT 1, '1 FN', '1 LN' UNION ALL
SELECT 2, '2 FN', '2 LN'
),
Invoice(CustomerId,Country,Total)
AS
(
SELECT 1, 'C 1', 100 UNION ALL
SELECT 1, 'C 1', 35 UNION ALL
SELECT 2, 'C 1', 80 UNION ALL
SELECT 2, 'C 1', 80 UNION ALL
SELECT 1, 'C 2', 50 UNION ALL
SELECT 2, 'C 2', 100 UNION ALL
SELECT 1, 'C 2', 50 UNION ALL
SELECT 1, 'C 3', 17 UNION ALL
SELECT 2, 'C 3', 17
)
SELECT
B.Country,
B.CustomerId,
C.FirstName,
C.LastName,
B.T AS TotalSpent
FROM
(
SELECT *,
RANK() OVER(PARTITION BY Country
ORDER BY Country,
T DESC) RN
FROM
(
SELECT i.Country,
C.CustomerId,
SUM(i.Total) T
FROM Customer C
INNER JOIN Invoice I ON c.CustomerId = i.CustomerId
GROUP BY i.Country,
C.CustomerId
) A
) B
INNER JOIN Customer C ON B.CustomerId = C.CustomerId
WHERE B.RN = 1
ORDER BY 1,2
Вывод (учитывая ввод CTE) -
Country CustomerId FirstName LastName TotalSpent
C 1 2 2 FN 2 LN 160
C 2 1 1 FN 1 LN 100
C 2 2 2 FN 2 LN 100
C 3 1 1 FN 1 LN 17
C 3 2 2 FN 2 LN 17