0

このようなテーブル:

Description Type    Amount
Record      1       10
Record      2       20
Record      1       5
Record      3       10

ランニングサムから特定のタイプのレコードを除外するにはどうすればよいですか?したがって、タイプ3を除外すると、現在の合計は次のようになります。

Description Type    Amount  RunningSum
Record      1       10      10
Record      2       20      30
Record      1       5       35

ローカル変数の更新手法を使用しています。私が持っているもの:

DECLARE @Amount DECIMAL(18, 4)

SET @Amount = 0

UPDATE MY_TABLE
SET RunningTotal = @Amount
    ,@Amount = @Amount + ISNULL(Amount, 0)
4

1 に答える 1

1

単純なWHERE節のようですよね?

WHERE [Type] <> 3;

例(変数をとして宣言した理由はわかりませんがDECIMAL):

DECLARE @d TABLE
(
  Description CHAR(6), 
  [Type] INT, -- bad column name choice!
  Amount DECIMAL(18,4), 
  RunningTotal DECIMAL(18,4) NULL
);

INSERT @d VALUES
 ('Record',1,10,NULL),
 ('Record',2,20,NULL),
 ('Record',1,5 ,NULL),
 ('Record',3,10,NULL);

DECLARE @rt DECIMAL(18, 4) = 0; -- calling this @Amount is confusing
                                -- it is storing the running total!

UPDATE @d
  SET @rt = RunningTotal = @rt + Amount
  WHERE [Type] <> 3;

SELECT Description, [Type], Amount, RunningTotal FROM @d;

結果:

Description Type Amount  RunningTotal
----------- ---- ------- ------------
Record      1    10.0000      10.0000
Record      2    20.0000      30.0000
Record      1     5.0000      35.0000
Record      3    10.0000         NULL

また、使用しているこの「風変わりな更新」方法は文書化されておらず、サポートされておらず、予測できない結果をもたらす可能性があることに注意してください。

http://sqlperformance.com/running-totals

于 2013-03-05T23:21:58.487 に答える