SQL中的条件最大值

Tas*_*que 4 sql t-sql sql-server query-optimization sql-server-2008

我必须在 SQL Server 中执行以下查询:

SELECT EmployeeID, 
       TotalQuantity AS TotalQty, 
       TotalSales, 
       MAX(CASE WHEN MonthNumber = MAX(MonthNumber)
           THEN TotalSales END) as RecentMonthSale
FROM vwSales 
GROUP BY EmployeeID, TotalQuantity , TotalSales
Run Code Online (Sandbox Code Playgroud)

但是它给了我错误:

Cannot perform an aggregate function on an expression
containing an aggregate or a subquery.
Run Code Online (Sandbox Code Playgroud)

输入视图如下:

EmployeeID    TotaSales MonthNumber
  1             4000      1
  1             6000      2
  2             8500      1
  2             6081      2 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

EmployeeID    TotalSale     RecentMonthSale
  1            10000            6000
  2            14581            6081
  3            11458            1012 
Run Code Online (Sandbox Code Playgroud)

我想要在我的输出EmployeeID, TotalQuantity TotalSale RecentMonthSale中的以下列 My View 具有以下列EmployeeID TotalSale,TotalQuantity, MonthNumber

Ale*_*Aza 5

此查询将显示您需要的输出,并且只会扫描表一次。

select EmployeeID, sum(TotalSales), sum(case when MaxMonth = 1 then TotalSales else 0 end) RecentMonthSales
from 
(
    select *, rank() over(order by MonthNumber desc) MaxMonth
    from
    (
        select EmployeeID, MonthNumber, sum(TotalSales) TotalSales
        from vwSales
        group by EmployeeID, MonthNumber
    ) tt
) tt
group by EmployeeID
Run Code Online (Sandbox Code Playgroud)