我在这里遇到这个问题。我试图使用case语句来确定使用哪个过滤器。将它用于单个值是可以的,但是使用Select Statement结果是不行的。
DECLARE @SingleValue INT = 0 SELECT t1.Field1 , t1.Field2 , t1.Field3 FROM tblTable1 t1 INNER JOIN tblTable2 t2 ON t1.Field1 = t2.Field WHERE t1.Field2 IN (SELECT CASE WHEN @SingleValue = 0 THEN (SELECT Field1 FROM tblTable3) ELSE t1.Field2 END) AND t2.Field2 = (CASE WHEN @SingleValue = 0 THEN t2.Field2 ELSE @SingleValue END)
将@singleValue设置为值' 123'然后它工作正常,我将值设置为' 0' (ZERO)然后它返回一个错误'子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。'
问题始于'(SELECT Field1 FROM tblTable3)'在案例陈述中。我如何解决它在case语句中获取多个值。
感谢。
答案 0 :(得分:0)
可能是这样的:
DECLARE @SingleValue INT = 0
SELECT
t1.Field1
, t1.Field2
, t1.Field3
FROM
tblTable1 t1
INNER JOIN tblTable2 t2 ON t1.Field1 = t2.Field
WHERE
(
( @SingleValue <> 0 )
or
( t1.Field2 IN ( SELECT Field1 FROM tblTable3) )
)
and
(
( @SingleValue = 0 )
or
( t2.Field2 = @SingleValue )
)