Simple INNER JOIN debería hacer el truco. A menos que te esté malinterpretando, lo que quieres es un total acumulado, ¿correcto?
Este ejemplo crea una tabla ficticia con datos ficticios y luego usa una combinación interna para el total acumulado. Desde el punto de vista del rendimiento, es probable que la expresión de tabla común sea más eficiente. Pero por simplicidad, la unión interna puede ser preferencial.
/* Dummy table */
create table testing1
(col1 int not null identity(1,1),
col2 varchar(5),
col3 int)
insert into testing1
values ('a', 10), ('a', 20), ('a', 30), ('b', 40), ('b', 50)
/* Running total example */
SELECT a.col1
, a.col2
, a.col3
, SUM(b.col3) AS total
FROM testing1 a INNER JOIN testing1 b
ON a.col1 >= b.col1
AND a.col2 = b.col2
GROUP BY a.col1, a.col2, a.col3
ORDER BY a.col1
/* Edit to include Output */
col1 col2 col3 total
1 a 10 10
2 a 20 30
3 a 30 60
4 b 40 40
5 b 50 90