我知道我们可以在CASE中使用BETWEEN。但我有一种情况,我想反过来做。我知道我们不能从case语句中返回多个值。但是如何实现以下情况?
select * from #Results
where Num Between
case when @StartIndex>0 then
((@StartIndex-1) * @PageCount))+ 1)) AND (@StartIndex * @PageCount)
else
((@StartIndex-1) * @PageCount)+ 1) AND (((@StartIndex-1) * @PageCount)+ 1)
答案 0 :(得分:1)
您可以执行以下操作
declare @start int,
@end int
set @start = ((@StartIndex -1)*PageCount) + 1
set @end = case when @StartIndex>0 then @StartIndex * @PageCount
else ((@StartIndex -1)*@PageCount) +1 end
select * from #Results
where Num Between @start and @end
答案 1 :(得分:1)
WHERE CASE WHEN @StartIndex > 0 AND
Num BETWEEN (((@StartIndex-1) * @PageCount) + 1) AND
(@StartIndex * @PageCount)
THEN TRUE
WHEN @StartIndex > 0 AND
Num BETWEEN (((@StartIndex-1) * @PageCount) + 1) AND
(((@StartIndex-1) * @PageCount) + 1)
THEN TRUE
ELSE FALSE -- other conditions?
END
答案 2 :(得分:1)
您需要AND/OR
逻辑
SELECT *
FROM #results
WHERE ( num BETWEEN ( ( @StartIndex - 1 ) * @PageCount ) + 1 AND @StartIndex * @PageCount
AND @StartIndex > 0 )
OR ( num BETWEEN ( ( @StartIndex - 1 ) * @PageCount ) + 1 AND ( ( @StartIndex - 1 ) * @PageCount ) + 1
AND @StartIndex <= 0 )
答案 3 :(得分:1)
尝试这种方式,你只需要使用case作为第二个条件,因为你的第一个条件相同
SELECT *
FROM #Results
WHERE Num BETWEEN (((@StartIndex-1) * @PageCount)+ 1) AND
CASE WHEN @StartIndex > 0 THEN
(@StartIndex * @PageCount)
ELSE
(((@StartIndex-1) * @PageCount)+ 1)
END
在您的代码中,两个右括号是额外的或未正确操作&#39;(((@ StartIndex-1)* @PageCount))+ 1))&#39;以及你操作案件的方式也是不允许的。在不同条件下的方式:
SELECT * FROM #Results
WHERE Num BETWEEN
CASE WHEN @StartIndex>0 THEN
(((@StartIndex-1) * @PageCount)+ 1)
ELSE
(((@StartIndex-1) * @PageCount)+ 1)
END
AND
CASE WHEN @StartIndex>0 THEN
(@StartIndex * @PageCount)
ELSE
(((@StartIndex-1) * @PageCount)+ 1)
END