0

MS Access に次の表があります。

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

週 201410 を最大売上高でマージし、どのマネージャーを選択する必要があります。この後、この 2 つの総売上を合計すると、次のようになります。

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

各行に一意の識別子 (主キー) があれば、はるかに簡単になります。ただし、あなたが望んでいたデータではなく、あなたが持っているデータで作業するので、これを達成するための私の回りくどい方法を次に示します。これをすべて 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
于 2013-09-24T16:36:58.353 に答える