sql-server - 使用 Sum 和 Over 运行总计在 SQL Server 2012 中不起作用
问题描述
我有一群加薪的员工。一个员工可以有多次加薪,每次加薪都有不同的原因。一个员工不能因为同一个原因多次加薪,所以 和 的组合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
第二条记录的 Running Salary Total 应为 100000 + 1000 + 5000 = 106000。
相反,如果我仅按 分区EmployeeID
,则显示每个员工的最终总数。
例如:
EmployeeID CurrentSalary RaiseAmount RaiseReason RunningSalaryTotal
---------------------------------------------------------------------------
1 100000 1000 Performance 106000
1 100000 5000 Promotion 106000
现在它只是一个总数,而不是一个运行总数。
如何让RunningSalaryTotal
每条记录正确递增?
解决方案
尝试这个
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
推荐阅读
- html - 在 r Shiny 中将外部超链接添加到 tabPanel 或 navbarMenu
- javascript - 为缓存颜色值的函数设置 localstorage
- javascript - 从 Postgres DB 获取 PNG 文本并将图像发送到前端 React
- http - 电报:错误请求:未能获取 HTTP URL 内容:两个相似的链接:一个有效,一个无效
- ios - 为什么 MKCoordinateRegion 不会显示小区域?
- html - Phoenix 无法生成带有错误“无效模块名称”的 html 模板
- list - 如何修复 Haskell 中的解析错误(可能不正确的缩进或不匹配的括号)
- c# - C#:如何转换任务
到任务的 IEnumerable - javascript - 每次获取文档时都将基于其他字段的新字段添加到文档中
- typescript - 打字稿>泛型>联合约束