各行に一意の識別子 (主キー) があれば、はるかに簡単になります。ただし、あなたが望んでいたデータではなく、あなたが持っているデータで作業するので、これを達成するための私の回りくどい方法を次に示します。これをすべて 1 つのクエリに結合して、一時テーブルの使用を避けることができます。簡潔にするのではなく、理解しやすいように、このように分割します。
まず、Name-Week の組み合わせごとに最高の Sales を抽出します。
SELECT Name, Week, MAX(Sales)
INTO #MaxSales
FROM [YourTable]
GROUP BY Name, Week
この情報を使用して、各週に使用するマネージャーを取得します (TOP 1 を使用して、2 人のマネージャーが同じ名前/週で同じ売上を出しているケースを解決します。これをどのように解決したいかわかりません. ):
SELECT Name, Week, Manager
INTO #MaxSalesManager
FROM [YourTable]
INNER JOIN #MaxSales
ON [YourTable].Name = #MaxSales.Name
AND [YourTable].Week = #MaxSales.Week
WHERE [YourTable].Sales = #MaxSales.Sales
これで、必要な情報を抽出できます。
SELECT [YourTable].Name, [YourTable].Week, #MaxSalesManager.Manager, SUM([YourTable].Sales)
FROM [YourTable]
INNER JOIN #MaxSalesManager
ON [YourTable].Name = #MaxSalesManager.Name
AND [YourTable].Week = #MaxSalesManager.Week
GROUP BY [YourTable].Name, [YourTable].Week, #MaxSalesManager.Manager
お役に立てれば!
編集:
それらをすべて 1 つのクエリに結合します。
SELECT [YourTable].Name,
[YourTable].Week,
#MaxSalesManager.Manager,
SUM([YourTable].Sales)
FROM [YourTable]
INNER JOIN
(SELECT Name, Week, Manager
FROM [YourTable]
INNER JOIN
(SELECT Name, Week, MAX(Sales)
FROM [YourTable]
GROUP BY Name, Week) AS #MaxSales
ON [YourTable].Name = #MaxSales.Name
AND [YourTable].Week = #MaxSales.Week
WHERE [YourTable].Sales = #MaxSales.Sales) AS #MaxSalesManager
ON [YourTable].Name = #MaxSalesManager.Name
AND [YourTable].Week = #MaxSalesManager.Week
GROUP BY [YourTable].Name, [YourTable].Week, #MaxSalesManager.Manager