【发布时间】:2016-04-11 20:02:49
【问题描述】:
只有当我从预定义值列表中找到 (a) 个值时,我才想在 WHERE 子句之后的查询中添加一个 AND 条件,否则不应添加该条件。
我要在此处添加的条件是“AND Table2.fieldvalue = importantvalue”,仅当参数值存在于 (1001, 1002, 1003, 1004, 1005, 1006, 1007) 的列表中时
另外传入的参数是一个字符串,其中 INT 值以逗号分隔,但我有一个用户定义的函数来拆分并将其转换为 INT
SELECT field1,field2,field3....
from Table1
join Table2 ON Table1.somefield = Table2.somefield
WHERE Table1.field1 = value
AND Table2.field2 = value
AND ( CASE WHEN @parameter IN ( 1001, 1002, 1003, 1004, 1005, 1006, 1007) AND Table2.fieldvalue = importantvalue THEN 1
ELSE 0
END ) = 1 AND Table2.somethingelse
GROUP BY blah,blah,blah..
HAVING blah,blah
【问题讨论】:
-
这是实现您想要的正确语法...如果
Table1.field3值在列表中不存在 (1001, 1002, 1003, 1004, 1005, 1006, 1007) 它不在乎@987654323 @ 是否为真...如果您想获得 1 作为结果,则这两个条件都应该为真。如果我误解了某些内容,请提供示例数据。
标签: sql-server tsql parameter-passing case conditional-statements