在SQL Server中按分组计算累计运行年限的实现方法
在SQL Server中按组件分组计算累计运行年数
原始数据
我在SQL Server中有如下数据:
| 序号 | 年份 | Component1 | Total Run years |
|---|---|---|---|
| 1 | 2011 | AAA | 3 |
| 2 | 2011 | BBB | 5 |
| 3 | 2011 | CCC | 7 |
| 4 | 2012 | AAA | 6 |
| 5 | 2012 | BBB | 2 |
| 6 | 2012 | CCC | 4 |
| 7 | 2013 | AAA | 3 |
| 8 | 2013 | BBB | 2 |
| 9 | 2013 | CCC | 5 |
需求
需要按年份和Component1分组,计算每个组件从起始年份到当前年份的累计Total Run years,期望结果如下:
| 年份 | Component1 | Total Run years |
|---|---|---|
| 2011 | AAA | 3 |
| 2011 | BBB | 5 |
| 2011 | CCC | 7 |
| 2012 | AAA | 9 |
| 2012 | BBB | 7 |
| 2012 | CCC | 11 |
| 2013 | AAA | 12 |
| 2013 | BBB | 9 |
| 2013 | CCC | 16 |
解决方案
可以使用SQL Server的窗口函数SUM() OVER()实现累计求和,具体SQL语句如下:
SELECT 年份, Component1, SUM([Total Run years]) OVER (PARTITION BY Component1 ORDER BY 年份) AS [Total Run years] FROM 你的表名 ORDER BY 年份, Component1;
逻辑说明
PARTITION BY Component1:按每个组件单独划分分组,确保累计计算仅针对同一组件的数据ORDER BY 年份:指定按年份升序排序,保证累计值从最早年份到当前年份依次累加- 最终结果按年份和Component1排序,与期望结果顺序一致
内容的提问来源于stack exchange,提问作者Mr.RK
相关产品推荐
相关产品推荐

