首页 > 解决方案 > 使用 Sum 和 Over 运行总计在 SQL Server 2012 中不起作用

问题描述

我有一群加薪的员工。一个员工可以有多次加薪,每次加薪都有不同的原因。一个员工不能因为同一个原因多次加薪,所以 和 的组合EmployeeIDRaiseReason唯一的。

每次加薪后,我需要保持每个员工的工资总额。

所以我有:

SELECT 
    EmployeeID, CurrentSalary, RaiseAmount, RaiseReason, 
    CurrentSalary + SUM(RaiseAmount) OVER (PARTITION BY EmployeeID, RaiseReason ORDER BY EmployeeID, RaiseReason) AS RunningSalaryTotal
FROM 
    Employees

如果我运行它,我不会得到运行总数,而是会重置每次加薪的总和。

例如:

EmployeeID   CurrentSalary   RaiseAmount   RaiseReason   RunningSalaryTotal
---------------------------------------------------------------------------
     1         100000          1000        Performance        101000
     1         100000          5000        Promotion          105000

第二条记录的 Running Salary Total 应为 100000 + 1000 + 5000 = 106000。

相反,如果我仅按 分区EmployeeID,则显示每个员工的最终总数。

例如:

EmployeeID   CurrentSalary   RaiseAmount   RaiseReason   RunningSalaryTotal
---------------------------------------------------------------------------
     1         100000          1000        Performance        106000
     1         100000          5000        Promotion          106000

现在它只是一个总数,而不是一个运行总数。

如何让RunningSalaryTotal每条记录正确递增?

标签: sql-serversql-server-2012

解决方案


尝试这个

SELECT EmployeeID, CurrentSalary, RaiseAmount, RaiseReason
    , CurrentSalary + SUM(RaiseAmount) OVER (PARTITION BY EmployeeID
                                                ORDER BY EmployeeID 
                                                ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS RunningSalaryTotal
FROM Employees

推荐阅读