2

重複の可能性:
SQL で 2 つの値の最小値を取得する

範囲内のすべての値を取得しようとしています。私はこのようなことをしています

DECLARE @StartSeq INT
set @StartSeq = (select Sequence from MyTbl where ...)

update ... and MyCol between @StartSeq and @StartSeq+@RelativePosition

しかし、RelativePosition が負の場合、startseq よりも少ない量であるため失敗します。私が考えることができる最も簡単な解決策は、コードを複製し、if (RelPos<0) を実行して、@StartSeq+@RelativePosition を最初または 2 番目に実行するかどうかを確認することです。しかし、それは最善の解決策とは思えません。SQLでそれを行う方法はありますか? min(a,b) を試しましたが、SQLでは機能しません。

4

2 に答える 2

4

このようなことができます:

update ... and ((MyCol between @StartSeq and @StartSeq+@RelativePosition)
             or (MyCol between @StartSeq+@RelativePosition and @StartSeq))

交互に:

declare @MinSeq int
declare @MaxSeq int

select @MinSeq = min(Seq), @MaxSeq = max(Seq)
from (values (@StartSeq), (@StartSeq+@RelativePosition)) this (Seq)

update ... and MyCol between @MinSeq and @MaxSeq
于 2013-01-07T14:53:00.730 に答える
0

CASE間にステートメントを使用できます。

and MyCol Between CASE When @StartSeq <= @relativePosition Then @Start Else @RelativePosition End
               And CASE When @StartSeq <= @relativePosition Then @RelativePosition Else @Start End

かなり厄介ですが、パラメーターが意味をなすように実際に確認する必要があります。

于 2013-01-07T14:52:00.087 に答える