where子句中的SQL Server CASE语句依赖于列

时间:2014-03-30 00:06:24

标签: sql sql-server tsql

我有一个带有select语句的存储过程,我正在尝试添加case语句,如果类型为列[si.TYPE]NEW,则会过滤根据{{​​1}}是否介于2个值之间,如果列MSRP[si.TYPE],则会根据USED是否介于2个值之间进行过滤。

第一个SELLINGPRICE显示错误:

  

BETWEEN附近的语法不正确

代码:

BETWEEN

我是否需要进行2次单独选择,然后SELECT .... FROM .... WHERE..... AND CASE si.[type] WHEN 'new' THEN si.[msrp] BETWEEN @priceMin AND @priceMax WHEN 'used' THEN si.[sellingprice] BETWEEN @priceMin AND @priceMax END; 结果才能实现此目的?它在MySQL中工作只需要在SQL Server中找到解决方案

1 个答案:

答案 0 :(得分:2)

在SQL Server中,您有布尔表达式,并且您有非布尔表达式。语法决定了它的类型,并且在期望非布尔表达式的地方不能使用布尔表达式。 MySQL允许它们更自由地混合。你必须重写你的语法;一种可能的方式是

 SELECT .... 
 FROM .... 
 WHERE.....
 AND (si.[type] = 'new' AND si.[msrp] BETWEEN @priceMin and @priceMax
      OR si.[type] = 'used' AND si.[sellingprice] BETWEEN @priceMin and @priceMax)