您需要点菜。假设你有一个ID:
SELECT *
, SUM(n) OVER(ORDER BY id)
FROM (VALUES (1, 1)
, (2, 0)
, (3, 0)
, (4, 0)
, (5, 1)
, (6, 0)
, (7, 0)
, (8, 0)
, (9, 0)
, (10, 1)
, (11, 0)
, (12, 1)
, (13, 0)
, (14, 0)
, (15, 1)
, (16, 0)
) x (id, n)
结果:
+------+---+-------+
| id | n | total |
+------+---+-------+
| 1 | 1 | 1 |
| 2 | 0 | 1 |
| 3 | 0 | 1 |
| 4 | 0 | 1 |
| 5 | 1 | 2 |
| 6 | 0 | 2 |
| 7 | 0 | 2 |
| 8 | 0 | 2 |
| 9 | 0 | 2 |
| 10 | 1 | 3 |
| 11 | 0 | 3 |
| 12 | 1 | 4 |
| 13 | 0 | 4 |
| 14 | 0 | 4 |
| 15 | 1 | 5 |
| 16 | 0 | 5 |
+------+---+-------+
编辑:以上只能从SQL Server 2012,对于以前的版本以下应该工作:
WITH test AS
(
SELECT *
FROM (VALUES (1, 1)
, (2, 0)
, (3, 0)
, (4, 0)
, (5, 1)
, (6, 0)
, (7, 0)
, (8, 0)
, (9, 0)
, (10, 1)
, (11, 0)
, (12, 1)
, (13, 0)
, (14, 0)
, (15, 1)
, (16, 0)
) x (id, n)
)
SELECT a.id
, a.n
, SUM(b.n)
FROM test a
LEFT JOIN test b
ON b.id <= a.id
GROUP BY a.id
, a.n
结果:
+----+---+-------+
| id | n | total |
+----+---+-------+
| 1 | 1 | 1 |
| 2 | 0 | 1 |
| 3 | 0 | 1 |
| 4 | 0 | 1 |
| 5 | 1 | 2 |
| 6 | 0 | 2 |
| 7 | 0 | 2 |
| 8 | 0 | 2 |
| 9 | 0 | 2 |
| 10 | 1 | 3 |
| 11 | 0 | 3 |
| 12 | 1 | 4 |
| 13 | 0 | 4 |
| 14 | 0 | 4 |
| 15 | 1 | 5 |
| 16 | 0 | 5 |
+----+---+-------+
没有ID列或时间戳或类似的? – jarlh