4

ID、値などの結果を含むクエリがあります。私が望むのは、ID の順に値を取得し、別の列で累積値を計算することです。私の簡略化されたコードを見てください:

declare @TempTable Table
(
    ID int,
    Value int
)
insert into @TempTable values
(1, 10),
(2, -15),
(3, 12),
(4, 18),
(5, 5)

select t1.ID, t1.Value, SUM(t2.Value) AccValue from @TempTable t1
inner join @TempTable t2 on t1.ID >= t2.ID
group by t1.ID, t1.Value
order by t1.ID




Result:
ID  Value   AccValue
1   10      10
2   -15     -5
3   12      7
4   18      25
5   5       30

私が思いついたのは、その目的のために結果とそれ自体の間に内部結合を使用することです。しかし、膨大な量のデータの場合、明らかにパフォーマンスの問題です。

それを行う他の代替手段はありますか?

4

3 に答える 3

2

再帰を使用できます:

;WITH x AS
(
    SELECT 
        [ID],
        [Value],
        bal=[Value]
    FROM Table1
    WHERE [ID] = 1
    UNION ALL
    SELECT 
        y.[ID],
        y.[Value],
        x.bal+(y.[Value]) as bal
    FROM x INNER JOIN Table1 AS y
    ON y.[ID] = x.[ID] + 1
)
SELECT 
    [ID],
    [Value],
    AccValue= bal
FROM x
order by ID
OPTION (MAXRECURSION 10000);

SQL フィドル

于 2013-07-08T13:56:05.873 に答える