2017-03-11 6 views
0

SQL Serverを使用して、次の表に4番目の列を修飾子と値の列に基づいて追加しようとしています。修飾子が130の場合、新しい列は値列にある任意の数でなければなりません。修飾子が130でない場合は、最新の修飾子130行に関連付けられた前の値を使用する必要があります。SQL他の列と以前の行に基づいて新しい列を挿入します

PrimaryKey | Qualifier | Value 
001  | 130  | 3 
002  | 207  | 24 
003  | 301  | 27 
004  | 130  | 8 
005  | 810  | 1 
002  | 900  | 9 

上記の表は、次の表になります。

PrimaryKey | Qualifier | Value | NewColumn 
001  | 130  | 3  | 3 
002  | 207  | 24 | 3 
003  | 301  | 27 | 3 
004  | 130  | 8  | 8 
005  | 810  | 1  | 8 
002  | 900  | 9  | 8 

私はこれをラグで実行しようとしていましたが、NewColumnの自己参照方法を理解できませんでした。私はまた、変数を設定することで実験しましたが、それを動作させることができませんでした。

答えて

1

あなたはまた、次のように合計+ FIRST_VALUEを使用することができます。

select *, first_value(Value) over (partition by GRP order by PrimaryKey) from (
    select *, sum(case when Qualifier = '130' then 1 else 0 end) 
      over (order by PrimaryKey) as GRP 
    from #tmp 
) X 

内側のSELECTでの合計+場合は、各グループごとに個別の番号を作成し、それは修飾子130で始まり、最初の値はそれを使用して結果を分割します。

Example

+0

ありがとう、この作業を得た。 – Drizzit12

2

私は最も簡単な方法はouter applyだと思う:

select t.*, t2.value as newcolumn 
from t outer apply 
    (select top 1 t2.* 
     from t t2 
     where t2.qualifier = 130 and t2.primarykey <= t.primarykey 
     order by t2.primarykey desc 
    ) t2; 
+0

私はこれで遊んが、私の実際のテーブルは今、私はこのすべてに新たなんだ与えられた何か間違ったことをやっていることを意味する(参加し、私はこのソリューションを動作させることができなかったが必要です)。その応答に感謝し、私はこれで遊ぶつもりです。今のところ、私は他のソリューションを手に入れました。 – Drizzit12

関連する問題