Как получить совокупную сумму

declare  @t table
    (
        id int,
        SomeNumt int
    )

insert into @t
select 1,10
union
select 2,12
union
select 3,3
union
select 4,15
union
select 5,23


select * from @t

вышеупомянутый выбор возвращает меня следующее.

id  SomeNumt
1   10
2   12
3   3
4   15
5   23

Как я получаю следующее

id  srome   CumSrome
1   10  10
2   12  22
3   3   25
4   15  40
5   23  63
164
задан Paolo Forgia 12 June 2017 в 09:35
поделиться

2 ответа

select t1.id, t1.SomeNumt, SUM(t2.SomeNumt) as sum
from @t t1
inner join @t t2 on t1.id >= t2.id
group by t1.id, t1.SomeNumt
order by t1.id

Пример SQL Siddle

Выход

| ID | SOMENUMT | SUM |
-----------------------
|  1 |       10 |  10 |
|  2 |       12 |  22 |
|  3 |        3 |  25 |
|  4 |       15 |  40 |
|  5 |       23 |  63 |

Редактировать: Это обобщенное решение, которое будет работать на большинстве платформ БД. Когда для вашей конкретной платформы доступно лучшее решение (E.G., Garet), используйте его!

203
ответ дан 23 November 2019 в 21:12
поделиться

Версия для CTE, просто для удовольствия:

;
WITH  abcd
        AS ( SELECT id
                   ,SomeNumt
                   ,SomeNumt AS MySum
             FROM   @t
             WHERE  id = 1
             UNION ALL
             SELECT t.id
                   ,t.SomeNumt
                   ,t.SomeNumt + a.MySum AS MySum
             FROM   @t AS t
                    JOIN abcd AS a ON a.id = t.id - 1
           )
  SELECT  *  FROM    abcd
OPTION  ( MAXRECURSION 1000 ) -- limit recursion here, or 0 for no limit.

Возвращает:

id          SomeNumt    MySum
----------- ----------- -----------
1           10          10
2           12          22
3           3           25
4           15          40
5           23          63
12
ответ дан 23 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: