sql >> Base de Datos >  >> RDS >> Sqlserver

TSQL-2008 SUMA (X) SOBRE (PARTICIÓN ... ORDEN POR CLÁUSULA)

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