这可能不是有效的SQL,但我正在尝试这样做:
SELECT *
FROM tablename
WHERE
(CASE @ScoreType
WHEN 1 THEN score1
WHEN 2 THEN score2
ELSE score3 END) >= @Score
基本上,我正在尝试按WHERE
子句中的不同列进行过滤,具体取决于@ScoreType
的值。我是否正确地猜测我的方法无效?如果是这样,那么正确的方法是什么?
编辑:抱歉,我在简化要在此处发布的查询时意外省略了end
。实际查询确实有end
。查询本身运行正常,但结果不符合预期。事实证明这个问题在其他地方。我怀疑是WHERE
条款,因为我以前从未尝试过这样的事情,并且不确定它是否是有效的SQL。
答案 0 :(得分:1)
这应该可行吗?
SELECT *
FROM tablename
WHERE
(CASE @ScoreType
WHEN 1 THEN score1
WHEN 2 THEN score2
WHEN 3 THEN score3
END) >= @Score
编辑:
我认为问题是:你忘记了案件的end
答案 1 :(得分:0)
你想要这样的东西:
SELECT *
FROM tablename
WHERE (@ScoreType = 1 AND score1 >= @Score) OR
(@ScoreType = 2 AND score2 >= @Score) OR
score3 >= @score
修改强>
正如@HABO指出的那样,上面与原始代码略有不同。替换为:
SELECT *
FROM tablename
WHERE (@ScoreType = 1 AND score1 >= @Score) OR
(@ScoreType = 2 AND score2 >= @Score) OR
(@ScoreType <> 1 AND @ScoreType <> 2 AND score3 >= @score)
答案 2 :(得分:0)
这应该有效:
SELECT *
FROM tablename
WHERE @Score <=
CASE @ScoreType
WHEN 1 THEN score1
WHEN 2 THEN score2
ELSE score3 END
答案 3 :(得分:-1)
SELECT *
FROM tablename
WHERE
CASE WHEN @ScoreType = 1 THEN score1
WHEN @Scoretype = 2 THEN score2
WHEN @Scoretype = 3 THEN score3
END
不确定你用
尝试实现的目标[>= @Score]
感谢编辑人员,我的愚蠢错误。