2013-09-24 59 views
0

我有MS訪問該表:合併行SQL - 訪問

Name | Week | Manager | Sales 
John | 201409 | Marcelo | 53 
John | 201410 | Marcelo | 20 
John | 201410 | Raquel | 30 
John | 201411 | Raquel | 53 

我得到最大的銷售合併201410周和選擇哪個經理。在此之後,我想總結這兩個總銷售額,並像這樣:

Name | Week | Manager | Sales 
John | 201409 | Marcelo | 53 
John | 201410 | Raquel | 50 
John | 201411 | Raquel | 53 

有人能幫助我嗎?我嘗試了很多SQL,無法做任何有用的事情。

回答

0

如果每一行都有一個唯一的標識符(主鍵),它會簡單得多。然而,你使用的是你所擁有的數據,而不是你希望擁有的數據,所以這是我完成它的迂迴方式。你可以將這一切結合成一個查詢並避免使用臨時表;我把它分解出來,以便於理解,而不是簡潔。

首先,提取每個名稱周聯合最高銷售:

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 
+0

這幫了我很多taserian!謝謝!但我不知道如何在一個查詢中合併所有這些。我該怎麼做?當我使用TOP 1時,它只返回一個值(更改爲通常的SELECT並返回我想要的與您告訴我兩位經理中的同名/同一周的問題)。任何理想?感謝你的幫助隊友! – lucasserafim

+0

另一個問題..如果我添加其他列?例如,我有不同的部門,銷售渠道和功能..我如何添加它而不會搞亂查詢? ps:我是新使用SQL,因爲你可以看到:) – lucasserafim

+0

我在我的答案中做了一個濃縮的查詢。此外,我刪除了TOP 1,但如果兩名或更多經理在名稱週期內完成相同的最高銷售額,您將遇到問題。作爲一個函數,這會更好地完成,但作爲SQL的新手,我不想走那麼遠。 最後,向最終結果添加更多列很簡單:只需在頂部的SELECT和底部的GROUP BY之後添加它們即可。確保你沒有在GROUP BY中包含SUM()。 – taserian

1

你可以試試這個:

SELECT [Name], [Week], [Manager], SUM([Sales]) as Sales1 
From [YourTable] 
GROUP BY [Name], [Week], [Manager] 

我沒有測試此所以讓我知道你會得到什麼錯誤。

+0

感謝盧克,但它並沒有奏效:/ – lucasserafim

+0

只是改變了列名更具體和修復表來更容易理解。 – lucasserafim

+0

我更改了名稱,但不要忘記更改查詢中的[YourTable]值。讓我知道事情的後續。 – Luke101