1. ホーム
  2. sql-server

[解決済み] 累積和の求め方

2022-02-19 03:15:56

質問

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

解決方法は?

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 Fiddleの例

出力

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

編集する これは、ほとんどのDBプラットフォームで動作する一般的なソリューションです。特定のプラットフォームでより良いソリューションがある場合は (例: gareth のもの)、それを使ってください!