0

私は SQL Server 2008 R2 で作業しています。現在のコストの合計で新しい列を作成するストアド プロシージャを作成しようとしています。

私は持っていますMyTable

ID     |   Costs
----------------
1      |     5
2      |     3
3      |     2
4      |     4

しかし、値を持つ 3 番目の列「CurrentCosts」が必要です。

ID     |   Costs   |  CurrentCosts
----------------------------------
1      |     5     |      5
2      |     3     |      8
3      |     2     |      10
4      |     4     |      14
  • 「CurrentCosts」の最初の値: 5 + 0 = 5
  • 「CurrentCosts」の 2 番目の値は、5 + 3 = 8 です。
  • 「CurrentCosts」の 3 番目の値は、8 + 2 = 10 です。
  • 「CurrentCosts」の 4 番目の値は、10 + 4 = 14 です。

等々。

私は試しました:

declare @ID INT
declare @current_cost int
declare @running_cost int

select @ID = min( ID ) from MyTable
set @running_cost = 0
set @current_cost = 0

while @ID is not null
begin
    select ID, Costs, @running_cost as 'CurrentCosts' from MyTable where ID = @ID
    select @ID = min( ID ) from MyTable where ID > @ID
    select @current_cost = Costs from MyTable where ID = @ID
    set @running_cost += @current_cost
end

それはうまくいきますが、誰かがより良い解決策を持っているなら、私は感謝します. ループ内の SELECT コマンドと同じ数のテーブルで、結果が 1 つだけの多数のテーブルを取得しました。すべての結果を含むテーブルを 1 つだけ取得する解決策はありますか。

4

2 に答える 2

3

サブクエリを使用できます。

SELECT ID, Costs, 
       (SELECT Sum(Costs) 
        FROM   dbo.MyTable t2 
        WHERE  t2.ID <= t1.ID) AS CurrentCosts 
FROM   dbo.MyTable t1 

デモ

ID     COSTS    CURRENTCOSTS
1        5            5
2        3            8
3        2            10
4        4            14
于 2013-07-22T12:11:46.407 に答える
0

この興味深いhttp://www.sqlperformance.com/2012/07/t-sql-queries/running-totalsを見つけることができます

于 2013-07-22T12:37:59.977 に答える