sql >> Database >  >> RDS >> Sqlserver

TSQL-2008 SUM(X) OVER (PARTITIE ... VOLGENS CLAUSULE)

Eenvoudige INNER JOIN zou het lukken. Tenzij ik je verkeerd begrijp, wil je een lopend totaal, correct?

In dit voorbeeld wordt een dummytabel met dummygegevens gemaakt en wordt vervolgens een inner join gebruikt voor het lopende totaal. Vanuit het oogpunt van prestaties is de Common Table Expression waarschijnlijk efficiënter. Maar voor de eenvoud heb ik de voorkeur aan de binnenkant.

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


  1. mysql regex_replace:hoe regex-groep te gebruiken ter vervanging

  2. Oracle PLSQL een cursor instellen vanuit een variabele

  3. Geautomatiseerde manier om XML-bestanden naar SQL-database te converteren?

  4. Hoe een Pandas Dataframe naar Django-model te schrijven?