2016-09-20 12 views
0

私はそれを行う方法を理解できないような論理で作業しようとしています。 問題: スクリーンショットenter image description here2つの列(Col1-Col2)を減算し、Col1の次の行に残ります。

の下に示したように、私は3つの列のPrimaryKey、COL1とCOL2を持っている私は、ののCol1にCOL3で残りを追加してい

、のは、新しい列COL3 =のCol1-Col2にしてみましょう次の行に戻し、再びそれを減算してCol3を得る。 > COL3 = 10.2 - - 5 = 5.2

は、私たちはテーブルの上や

のPrimaryKey = 1のために考えてみましょう。

この5.2は、 15 + 5.2 = 20.2のPrimaryKey = 2のCol1に追加する必要があります。

ここでもまたCol3 = 20.2-3 = 17.2です。このように、次のレコードを繰り返す必要があります。

私の問題を説明するのに十分明確であることを願っています。それ以上の説明が必要な場合はお知らせください。

*提供されているテーブルは単なるサンプルテーブルです。私が実際に使用しているテーブルは非常に大きいです。

ありがとうございます。

+0

あなたの質問を編集した結果を示し、好ましくはテキストとしてしてください表 –

答えて

1

私が知る限り、col2の累積値からcol1の累計を差し引いて求めてください。 SQL Serverの2012+では、あなたはどうなる:主キーは、このようないくつかの点でレコードを削除するからと、完了していない場合

select t.*, 
     sum(col2 - col1) over (order by primary key) 
from t; 
0

あなたは、元のテーブルの上に自己結合を使用することができますが、危険性があります。ここでは、ROW_NUMBERで自己結合を使用して、確実にシーケンシャルなキーを作成します。[この行番号]を[この行番号+1]に結合することができます(他の誰かがより良い方法を持つ場合のサンプルデータ)。

DECLARE @YourTable TABLE (PrimaryKey INT IDENTITY(1,1), COL1 FLOAT, COL2 FLOAT) 
INSERT INTO @YourTable 
     (COL1, COL2) 
VALUES 
     (10.2, 5.0) 
    , (15.0, 3.0) 
    , (5.7, 6) 
    , (9.0, 5.5) 

; WITH TableRanked 
AS (
    SELECT PrimaryKey , 
      COL1 , 
      COL2 
      , COL3 = COL1 - COL2 
      , RowNum = ROW_NUMBER() OVER(ORDER BY PrimaryKey) 
    FROM @YourTable 
    ) 
SELECT tr.PrimaryKey , 
     tr.COL1 , 
     tr.COL2 , 
     tr.COL3 
     , COL1Next = COALESCE(trNext.COL1, 0) 
     , COL4 = tr.COL3 + COALESCE(trNext.COL1, 0) 
FROM TableRanked tr 
    LEFT JOIN TableRanked trNext 
     -- Here's where the magic happens: 
     ON trNext.RowNum = (tr.RowNum + 1) 
0

SQL Server 2012を使用している場合は、LEADを使用できます。これは、あなたラッセルが掲示何としてではなく、より高いパフォーマンスと同じ結果を得ることができます:

DECLARE @YourTable TABLE (PrimaryKey INT IDENTITY(1,1), COL1 FLOAT, COL2 FLOAT) 
INSERT INTO @YourTable (COL1, COL2) 
VALUES (10.2, 5.0), (15.0, 3.0), (5.7, 6), (9.0, 5.5); 

SELECT *, (COL1 - COL2) + LEAD(COL1,1,0) OVER (ORDER BY PrimaryKey) 
FROM @YourTable; 
0

は、このクエリが助け場合、私に教えてください:

DECLARE @n int 
SELECT @n = count(*) from @yourTable 
DECLARE @counter int 
SELECT @counter = MIN(PrimaryKeyCol) from @yourTable 
DECLARE @col3 = 0 

WHILE (@counter <= @n) 
SELECT @col3 = @col3 + Col1 - Col2 from @yourTable where PrimaryKeyCol = @counter 
Print @col3 
@counter = @counter + 1 
END 
関連する問題