0

我在 MS Access 上有这张表:

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,但无济于事。

4

2 回答 2

1

你可以试试这个:

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

我没有对此进行测试,所以让我知道您遇到了什么错误。

于 2013-09-24T13:07:20.523 回答
0

如果每一行都有一个唯一的标识符(主键),那就简单多了。但是,您使用的是您拥有的数据,而不是您希望拥有的数据,所以这是我完成它的迂回方式。您可以将所有这些组合到一个查询中并避免使用临时表;我以这种方式将其拆分为便于理解,而不是简洁。

首先,提取每个 Name-Week 组合的最高销售额:

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
于 2013-09-24T16:36:58.353 回答