sql >> Databasteknik >  >> RDS >> Sqlserver

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

Enkel INNER JOIN borde göra susen. Om jag inte missförstår dig, är det du vill ha en löpande summa, eller hur?

Det här exemplet skapar en dummy-tabell med dummy-data och använder sedan en inre koppling för den löpande summan. Ur prestationssynpunkt är det gemensamma tabelluttrycket troligen mer effektivt. Men för enkelhetens skull är den inre föreningen att föredra.

/* 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. postgresql port confusion 5433 eller 5432?

  2. Vad är ett en-till-många-förhållande i en databas? En förklaring med exempel

  3. Hur man ändrar db-sekvensens startvärde

  4. C# DateTime MySQL-kommando