我真的不确定这个问题的最佳措辞,但这是我的困境:
我传递一个值到一个sql查询作为@district
。这个值可能是确切的地区,但它也有可能是一个值,应该创建一组多个地区。如果我传递002
,我想让WHERE
子句变成I.Offense_Tract = @district
。如果我传递Other
,我希望WHERE
子句说I.Offense_Tract in ()
。我要做的是:
AND
CASE
WHEN @district = "Other" THEN I.Offense_Tract in ('BAR','COL','GER','MEM','MIL','JAIL','JAILEAST','SCCC','1USD','2USD')
ELSE I.Offense_Tract = @district
END
但这不起作用。重述的问题是,如果传递的值是Other
以外的任何东西,我只是希望它是=。如果Other
通过了,我希望它是IN
。
您不需要CASE
表达式。
您可以将此逻辑应用于AND
和OR
运算符:
AND (
(@district = 'Other' AND I.Offense_Tract IN ('BAR','COL','GER','MEM','MIL','JAIL','JAILEAST','SCCC','1USD','2USD'))
OR
(@district <> 'Other' AND I.Offense_Tract = @district)
)
请注意,在MySql, Postgresql和SQLite等数据库中,您的代码将按原样工作。