sql - SQL中的条件最大值

标签 sql sql-server tsql sql-server-2008 query-optimization

我必须在 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

但是它给了我错误:

Cannot perform an aggregate function on an expression
containing an aggregate or a subquery.


输入 View 如下:
EmployeeID    TotaSales MonthNumber
  1             4000      1
  1             6000      2
  2             8500      1
  2             6081      2 

期望的输出:
EmployeeID    TotalSale     RecentMonthSale
  1            10000            6000
  2            14581            6081
  3            11458            1012 

我想在我的输出中加入以下列 EmployeeID, TotalQuantity TotalSale RecentMonthSale我的 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

关于sql - SQL中的条件最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393989/

相关文章:

sql - 将一个数据库复制到另一个数据库

python - 由于双主键,无法映射外键

sql - 根据其他两个字段中的值更新字段

sql - 对每个月的字段进行累计和动态求和

mysql - 这个查询看起来优化了吗?

php - 通过点击优化内容流行度查询

sql - TSQL 更新后触发器检查一个 IF UPDATE 中多个列的更新

sql - 使用拥有规则的多个分隔符(和 - )拆分 sql 中的数据

sql - Postgres 中的 SERIAL 数据类型

java - Play Framework,OneToOne 关系不起作用