I次の表があります。SQLのプログレッシブ合計
CREATE TABLE tbl_proc(
[proc] float,
subscriber bigint
)
データ:
proc | subscriber
-----|-----------
0.7 | 123456
0.5 | 1234567
0.3 | 12345
0.3 | 45678
0.3 | 1234
0.2 | 123455
0.1 | 894562
私は和を表し、テーブルに新しい列を追加するための良い方法を見つけたいです上記の値。
結果:データはPROCでDESCをソートされ、私のテーブルでは
Select a.[proc],SUM(b.[proc])
from tbl_proc a, tbl_proc b
where a.[proc] <= b.[proc] and (a.[proc] <> b.[proc] or a.subscriber >= b.subscriber)
group by a.[proc],a.subscriber
order by a.[proc] desc
:
proc | subscriber | col3
-----|------------|------------
0.7 | 123456 | 0.7
0.5 | 1234567 | 1.2 -- 0.7 + proc
0.3 | 12345 | 1.5
...
私は、次のような方法を見つけました。また、加入者列は一意です。
私が見つけたこの方法は、ちょっと高価すぎる(テーブルが大きい)。 パフォーマンス上の理由から、カーソルのようなソリューションは考慮していませんでした。
提案がありますか?
更新:
限り:私は少し問題をGoogleで検索し、私はこのページのソリューション「ローカル変数へのアップデート」を見つけ
私がこれをテストしたところ、今のところ最高の解決策であることがわかります。
宣言@runningTotalフロート= 0
UPDATE tbl_proc SET @RunningTotal = new_col = @RunningTotal + [PROC]
tbl_proc
たぶん、あなたは* *カーソルのソリューションを試してみて、結果を比較する必要があり、あなたは驚くかもしれません。また、問題の解決策を探しましたか?私はグーグル "SQLの実行合計"と答えの負荷を見つけた。 – Tony
@Martin私は間違いを訂正しました。 Sry –
この種のクエリは、[OVER'句の強化](http://www.geniiius.com/blog/t-sql-enhancements-over-clause/)のためにDenaliではずっと簡単です*順序を決定するために他の属性が必要であると他の人に同意します。 – onedaywhen