我可以在SQL中使用基于传递值的不同选择比较吗?



我真的不确定这个问题的最佳措辞,但这是我的困境:

我传递一个值到一个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表达式。
您可以将此逻辑应用于ANDOR运算符:

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等数据库中,您的代码将按原样工作。

最新更新