Sql server 在SQL Server 2012中使用总和和超过运行总计不起作用
我有一群加薪的员工。一名员工可以多次加薪,每次加薪的原因不同。一名员工不能因同一原因多次加薪,因此Sql server 在SQL Server 2012中使用总和和超过运行总计不起作用,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有一群加薪的员工。一名员工可以多次加薪,每次加薪的原因不同。一名员工不能因同一原因多次加薪,因此EmployeeID和RaiseReason的组合是唯一的 每次加薪后,我需要记录每个员工的工资总额 因此,我: SELECT EmployeeID, CurrentSalary, RaiseAmount, RaiseReason, CurrentSalary + SUM(RaiseAmount) OVER (PARTITION BY EmployeeID, RaiseReaso
EmployeeID
和RaiseReason
的组合是唯一的
每次加薪后,我需要记录每个员工的工资总额
因此,我:
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
EmployeeID CurrentSalary RaiseAmount RaiseReason RunningSalaryTotal
---------------------------------------------------------------------------
1 100000 1000 Performance 106000
1 100000 5000 Promotion 106000
第二条记录的持续工资总额应为100000+1000+5000=106000
如果我只按EmployeeID
划分,则显示每个员工的最终总数
例如:
EmployeeID CurrentSalary RaiseAmount RaiseReason RunningSalaryTotal
---------------------------------------------------------------------------
1 100000 1000 Performance 101000
1 100000 5000 Promotion 105000
EmployeeID CurrentSalary RaiseAmount RaiseReason RunningSalaryTotal
---------------------------------------------------------------------------
1 100000 1000 Performance 106000
1 100000 5000 Promotion 106000
现在它只是一个总数,不是一个连续的总数
如何使
RunningSalaryTotal
为每个记录正确地递增?只需按从分区中删除raisereason即可
SELECT EmployeeID, CurrentSalary, RaiseAmount, RaiseReason, CurrentSalary + SUM(RaiseAmount) OVER (PARTITION BY EmployeeID ORDER BY EmployeeID, RaiseReason) AS RunningSalaryTotal
FROM Employees
Sql fiddle试试这个
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
如果您不想在每次提升后“重置”,为什么在
分区依据
子句中有RaiseReason
?此外,如果您提供数据,请将其作为DDL和DML语句或表格格式的文本提供;样本数据和预期结果几乎不可能理解,并且从DBMS的角度来看是不可使用的。@Larnu正如我所说,我尝试了使用RaiseReason和不使用RaiseReason。两者都不正确。如果没有加薪原因,它不会为每个员工提供一个运行总数,只是一个总数。正如我所说的,如果我删除了加薪原因,那么我不会为每个员工提供一个运行总数,只是一个总数。不,请检查这里的t.ly/2nxpOSorry,它不起作用。我只是重复计算每个员工的总数,即使该员工多次加薪。每个员工都有他们当前的工资加上所有的加薪。我甚至已经重新运行了查询,但没有在分区中重新查找原因。您是否检查了sql FIDLE链接?因为默认情况下窗口是在无界的前一行和当前行之间的行,在这种情况下我们不需要明确提及,我不太熟悉它,不知道为什么,但是出于任何原因,有必要明确指定无界的前一行和当前行。一旦将其包括在内,运行总数就起作用了。可能是SQL Server配置问题?是否有某种标志可以改变默认行为?工作得很好!谢谢