累積合計を取得する方法 質問する

累積合計を取得する方法 質問する
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

ベストアンサー1

SQL Server の最新バージョン (2012) では、次のことが可能になります。

SELECT 
    RowID, 
    Col1,
    SUM(Col1) OVER(ORDER BY RowId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Col2
FROM tablehh
ORDER BY RowId

または

SELECT 
    GroupID, 
    RowID, 
    Col1,
    SUM(Col1) OVER(PARTITION BY GroupID ORDER BY RowId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Col2
FROM tablehh
ORDER BY RowId

これはさらに高速です。パーティション化されたバージョンでは、500 万行を超える処理が 34 秒で完了します。

別の回答で言及されている SQL チーム スレッドにコメントしてくれた Peso に感謝します。

おすすめ記事