私はこのようになりますいくつかのデータがあります。はすぐにセットベースの操作
+---+--------+-------------+---------------+--------------+
| | A | B | C | D |
+---+--------+-------------+---------------+--------------+
| 1 | row_id | disposal_id | excess_weight | total_weight |
| 2 | 1 | 1 | 0 | 30 |
| 3 | 2 | 1 | 10 | 30 |
| 4 | 3 | 1 | 0 | 30 |
| 5 | 4 | 2 | 5 | 50 |
| 6 | 5 | 2 | 0 | 50 |
| 7 | 6 | 2 | 15 | 50 |
| 8 | 7 | 2 | 5 | 50 |
| 9 | 8 | 2 | 5 | 50 |
+---+--------+-------------+---------------+--------------+
そして、私はこのように見えるためにそれを変換しています:基本的に
+---+--------+-------------+---------------+--------------+
| | A | B | C | D |
+---+--------+-------------+---------------+--------------+
| 1 | row_id | disposal_id | excess_weight | total_weight |
| 2 | 1 | 1 | 0 | 30 |
| 3 | 2 | 1 | 10 | 30 |
| 4 | 3 | 1 | 0 | 20 |
| 5 | 4 | 2 | 5 | 50 |
| 6 | 5 | 2 | 0 | 45 |
| 7 | 6 | 2 | 15 | 45 |
| 8 | 7 | 2 | 5 | 30 |
| 9 | 8 | 2 | 5 | 25 |
+---+--------+-------------+---------------+--------------+
を、I同じdisposal_idに属するテーブルの前の行からexcess_weightsの合計を差し引いてtotal_weight列を更新する必要があります。
私は現在カーソルを使用しています。これは、私が試した他の解決法(cte、三角結合、クロス適用)のためです。私のカーソルソリューションは、新しいdisposal_idごとにゼロにリセットされ、余分なウェイトでインクリメントし、必要に応じて更新を実行し、約40秒で実行される実行中の合計を保持します。私が試した他の解決策は3〜5分かかりました。セットベースの操作を使用してこれを行うには比較的パフォーマンスの良い方法があるのでしょうか?
私は最近これについてブログしました:http://www.sqlperformance.com/2012/07/t-sql-queries/running-totals –