C在SQL中设置了min / max?

时间:2013-01-07 14:45:32

标签: sql sql-server sql-server-2008

  

可能重复:
  Getting the minimum of two values in sql

我正在尝试获取范围之间的所有值。我正在做这样的事情

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。然而,这似乎不是最好的解决方案。有没有办法在sql中做到这一点?我尝试了min(a,b),但它在sql中不起作用。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以在中间使用CASE声明,例如

and MyCol Between CASE When @StartSeq <= @relativePosition Then @Start Else @RelativePosition End
               And CASE When @StartSeq <= @relativePosition Then @RelativePosition Else @Start End
然而,这是相当讨厌的,你应该尽力确保参数有意义。