Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

TSQL-2008 SUM(X) OVER (PARTITION ... ORDER BY CLAUSE)

INNER JOIN simple devrait faire l'affaire. Sauf erreur de ma part, ce que vous voulez, c'est un total cumulé, n'est-ce pas ?

Cet exemple crée une table factice avec des données factices, puis utilise une jointure interne pour le total cumulé. Du point de vue des performances, l'expression de table commune est probablement plus efficace. Mais pour plus de simplicité, la jointure interne est préférentielle.

/* 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