结合使用 CASE 和 WHERE 来指定不同的列作为过滤依据

Using CASE in combination with WHERE to specify different columns to filter by(结合使用 CASE 和 WHERE 来指定不同的列作为过滤依据)
本文介绍了结合使用 CASE 和 WHERE 来指定不同的列作为过滤依据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

这可能不是有效的 SQL,但这是我想要做的:

This probably isn't valid SQL, but this is what I'm trying to do:

SELECT * 
FROM tablename
WHERE 
    (CASE @ScoreType 
        WHEN 1 THEN score1 
        WHEN 2 THEN score2 
        ELSE score3 END) >= @Score

基本上,我试图根据 @ScoreType 的值在 WHERE 子句中按不同的列进行过滤.我猜测我的方法无效是否正确?如果是这样,解决此问题的正确方法是什么?

Basically, I'm trying to filter by different columns in the WHERE clause depending on the value of @ScoreType. Am I right in guessing that my approach isn't valid? If so, what would be the proper way to go about this?

edit:抱歉,我在简化查询时不小心省略了 end 以在此处发布.实际查询确实有 end.查询本身运行良好,但结果并不如预期.原来问题出在别处.我怀疑 WHERE 子句,因为我以前从未尝试过这样的事情,并且不确定它是否是有效的 SQL.

edit: Sorry, I accidentally omitted end while simplifying the query to post here. The actual query does have end. The query itself runs fine, but the results weren't as expected. It turns out the issue was elsewhere. I suspected the WHERE clause because I've never tried anything like this before and was unsure of whether it was valid SQL.

推荐答案

这应该可行吗?

SELECT * 
FROM tablename
WHERE 
    (CASE @ScoreType 
        WHEN 1 THEN score1 
        WHEN 2 THEN score2 
        WHEN 3 THEN score3
      END) >= @Score

<小时>

我认为问题是:你忘记了案例的end

I think the problem is: you forgot the end to the case

这篇关于结合使用 CASE 和 WHERE 来指定不同的列作为过滤依据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Error casting varchar containing a number expressed in scientific notation to decimal(将包含以科学记数法表示的数字的 varchar 转换为十进制时出错)
Calculate cumulative product value(计算累积产品价值)
SQL Server loop for changing multiple values of different users(用于更改不同用户的多个值的 SQL Server 循环)
SQL Server 2008: Can a multi-statement UDF return a UDT?(SQL Server 2008:多语句 UDF 能否返回 UDT?)
Merge columns in sql(合并sql中的列)
SQL Column is invalid in ORDER BY, not contained in aggregate or GROUP BY(SQL 列在 ORDER BY 中无效,未包含在聚合或 GROUP BY 中)