为每个前一行添加值
Adding Values Per Preceding Row
我有一个 table Grader
:
+--------------------------+
|GraderName | Graded_Items |
+--------------------------+
| A | 21 |
| B | 7 |
| C | 17 |
| D | 91 |
| E | 84 |
| F | 52 |
| G | 34 |
+--------------------------+
我想把第一行和第二行的SUM
放在第二行; SUM
第一、二、三行放在第三行;依此类推到其他行。见下文:
+--------------------------------+
|GraderName | Graded_Items |
+--------------------------------+
| A |21 |
| B |21+7 |
| C |21+7+17 |
| D |21+7+17+91 |
| E |21+7+17+91+84 |
| F |21+7+17+91+84+52 |
| G |21+7+17+91+84+52+34 |
+--------------------------------+
我想达到这个结果:
+--------------------------+
|GraderName | Graded_Items |
+--------------------------+
| A | 21 |
| B | 28 |
| C | 45 |
| D | 136 |
| E | 220 |
| F | 272 |
| G | 306 |
+--------------------------+
我试过这个查询:
SELECT Grader,Graded_Items FROM Grader WHERE Grader='A'
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D','E')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D','E','F')
但是,我的问题是 table 一直在变化,例如 GraderName
在同时填充其对应的 Graded_Items
。还有其他方法可以达到我的预期效果吗?
使用 Sum over()
技巧获得 运行 总数
select GraderName,
sum(Graded_Items) over(order by GraderName) As Graded_Items
From yourtable
我有一个 table Grader
:
+--------------------------+
|GraderName | Graded_Items |
+--------------------------+
| A | 21 |
| B | 7 |
| C | 17 |
| D | 91 |
| E | 84 |
| F | 52 |
| G | 34 |
+--------------------------+
我想把第一行和第二行的SUM
放在第二行; SUM
第一、二、三行放在第三行;依此类推到其他行。见下文:
+--------------------------------+
|GraderName | Graded_Items |
+--------------------------------+
| A |21 |
| B |21+7 |
| C |21+7+17 |
| D |21+7+17+91 |
| E |21+7+17+91+84 |
| F |21+7+17+91+84+52 |
| G |21+7+17+91+84+52+34 |
+--------------------------------+
我想达到这个结果:
+--------------------------+
|GraderName | Graded_Items |
+--------------------------+
| A | 21 |
| B | 28 |
| C | 45 |
| D | 136 |
| E | 220 |
| F | 272 |
| G | 306 |
+--------------------------+
我试过这个查询:
SELECT Grader,Graded_Items FROM Grader WHERE Grader='A'
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D','E')
UNION ALL
SELECT MAX(Grader),SUM(Graded_Items) FROM Grader WHERE Grader in ('A','B','C','D','E','F')
但是,我的问题是 table 一直在变化,例如 GraderName
在同时填充其对应的 Graded_Items
。还有其他方法可以达到我的预期效果吗?
使用 Sum over()
技巧获得 运行 总数
select GraderName,
sum(Graded_Items) over(order by GraderName) As Graded_Items
From yourtable