を新しい値に到達するまで上記の値から列の値を入力して、私は次のように記入の値を持つテーブルを持っている:私はいっぱいになり、トリガーを追加する必要がそれがSQL Serverで現在
挿入時の値は、その最終的な結果は次のようになります。
プロセスはあなたが値を下にドラッグExcelで類似しています。しかし、新しい価値観を打つ前にそれを止めて、プロセスをやり直す必要があります。
ただし、次の値がないことがあります。終了がない場合、どうすれば更新を停止できますか?
を新しい値に到達するまで上記の値から列の値を入力して、私は次のように記入の値を持つテーブルを持っている:私はいっぱいになり、トリガーを追加する必要がそれがSQL Serverで現在
挿入時の値は、その最終的な結果は次のようになります。
プロセスはあなたが値を下にドラッグExcelで類似しています。しかし、新しい価値観を打つ前にそれを止めて、プロセスをやり直す必要があります。
ただし、次の値がないことがあります。終了がない場合、どうすれば更新を停止できますか?
これは、2つの相関サブクエリで実行できます。
create table #YourTable (RowNumber int identity(1,1), [Value] int null)
insert into #YourTable
values
(10),
(null),
(null),
(null),
(null),
(null),
(null),
(null),
(20),
(null),
(null),
(null),
(null),
(30),
(null),
(40),
(null),
(null),
(50)
select
t.RowNumber
,OldVal = t.Value
,NewVal = case
when t.[Value] is null
then (select t3.[Value]
from #YourTable t3
where t3.RowNumber = (select max(RowNumber)
from #YourTable t2
where t2.RowNumber < t.RowNumber and t2.Value is not null)
)
else [Value]
end
from #YourTable t
order by
t.RowNumber
drop table #YourTable
テーブルを更新する場合は、これを行う方法があります(新しいテストデータ)。
create table #YourTable (RowNumber int identity(1,1), [Value] int null)
insert into #YourTable
values
(10),
(null),
(null),
(null),
(5),
(null),
(null),
(null),
(20),
(null),
(15),
(null),
(null),
(30),
(null),
(40),
(null),
(null),
(50),
(null),
(null)
update t
set [Value] = case
when t.[Value] is null
then (select t3.[Value]
from #YourTable t3
where t3.RowNumber = (select max(RowNumber)
from #YourTable t2
where t2.RowNumber < t.RowNumber and t2.Value is not null)
)
else [Value]
end
from #YourTable t
select * from #YourTable order by RowNumber
あなたがテーブルを更新したら、その後、あなたのINSERT文がちょうど価値はあなたがIS NULL
を挿入したりしていないかどうかを確認する必要があり、それがある場合、最後の値に設定します。それは、...
ここでは、我々は以下のNULL
を挿入されていないので、挿入された値が実際に50が、その後、最後のテストテーブル
declare @valToInsert int = null
insert into #YourTable
select case when @valToInsert is null then (select top 1 [Value] from #YourTable order by RowNumber desc) else @valToInsert end
をオフに基づいて行われますので、NULL
を挿入し、このようなものです実際の値を挿入します
declare @valToInsert int = 14
insert into #YourTable
select case when @valToInsert is null then (select top 1 [Value] from #YourTable order by RowNumber desc) else @valToInsert end
あなたの回答は私のところに途中まで届きました。あなたのコードを実装しようとしましたが、いくつかのヌル値を間違ったデータで上書きすることに気付きました。これらのヌル値が100%正確であることを確認する必要があります。 – AlanPear
私の更新を見てください – AlanPear
あなたは最初の列に対してまったく異なる値を設定しました。この列のACTUALデータは何ですか?あなたがあなたの編集で説明したように "セット"を決定するのは何ですか?行の最初の文字ですか?あなたは具体的にする必要があります。元の答えは元の質問には完璧でした。 – scsimon