如果每一行都有一個唯一的標識符(主鍵),它會簡單得多。然而,你使用的是你所擁有的數據,而不是你希望擁有的數據,所以這是我完成它的迂迴方式。你可以將這一切結合成一個查詢並避免使用臨時表;我把它分解出來,以便於理解,而不是簡潔。
首先,提取每個名稱周聯合最高銷售:
SELECT Name, Week, MAX(Sales)
INTO #MaxSales
FROM [YourTable]
GROUP BY Name, Week
使用該信息來獲得,你應該爲每星期使用管理器(我們使用TOP 1解決以下情況:經理有相同名稱/周相同的銷售;我不知道你會如何想解決此):
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
希望這會有所幫助!
編輯:
他們都結合到一個查詢:
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
這幫了我很多taserian!謝謝!但我不知道如何在一個查詢中合併所有這些。我該怎麼做?當我使用TOP 1時,它只返回一個值(更改爲通常的SELECT並返回我想要的與您告訴我兩位經理中的同名/同一周的問題)。任何理想?感謝你的幫助隊友! – lucasserafim
另一個問題..如果我添加其他列?例如,我有不同的部門,銷售渠道和功能..我如何添加它而不會搞亂查詢? ps:我是新使用SQL,因爲你可以看到:) – lucasserafim
我在我的答案中做了一個濃縮的查詢。此外,我刪除了TOP 1,但如果兩名或更多經理在名稱週期內完成相同的最高銷售額,您將遇到問題。作爲一個函數,這會更好地完成,但作爲SQL的新手,我不想走那麼遠。 最後,向最終結果添加更多列很簡單:只需在頂部的SELECT和底部的GROUP BY之後添加它們即可。確保你沒有在GROUP BY中包含SUM()。 – taserian