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 に感謝します。