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)
但是它给了我错误:
Run Code Online (Sandbox Code Playgroud)Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
输入视图如下:
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。
此查询将显示您需要的输出,并且只会扫描表一次。
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)