Resultados de partición en una consulta de totales acumulados

Estoy buscando una forma rápida de crear totales acumulados en un gran conjunto de datos de SQL Server 2008 que se particionan por una columna en particular, potencialmente utilizando unasolución variable de asignación múltiple. Como ejemplo muy básico, me gustaría crear la columna "acumulativa_total" a continuación:

user_id | month | total | cumulative_total

1       | 1     | 2.0   | 2.0
1       | 2     | 1.0   | 3.0
1       | 3     | 3.5   | 8.5

2       | 1     | 0.5   | 0.5
2       | 2     | 1.5   | 2.0
2       | 3     | 2.0   | 4.0

Tradicionalmente, hemos hecho esto con subconsultas correlacionadas, pero en grandes cantidades de datos (más de 200,000 filas y varias categorías diferentes de total acumulado) esto no nos está dando un rendimiento ideal.

Recientemente leí sobre el uso de múltiples variables de asignación para la suma acumulativa aquí:

http://sqlblog.com/blogs/paul_nielsen/archive/2007/12/06/cumulative-totals-screencast.aspx

En el ejemplo de ese blog, la solución de la variable acumulativa se ve así:

UPDATE my_table
SET @CumulativeTotal=cumulative_total=@CumulativeTotal+ISNULL(total, 0)

Esta solución parece brillantemente rápida para sumar para un solo usuario en el ejemplo anterior (usuario 1 o usuario 2). Sin embargo, necesito particionar efectivamente por usuario, darme el total acumulado por usuario por mes.

¿Alguien sabe de una manera de extender el concepto de variable de asignación múltiple para resolver esto, o alguna otra idea que no sean las subconsultas o cursores correlacionados?

Muchas gracias por cualquier consejo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta