我有一个带有交叉连接和左连接的长存储过程。我在这个表中有几个参数。在最后两个左连接中,我想基于参数添加条件where子句。
我将调用此参数@NonCAT
,它基本上是类别代码。我试图实现的where子句只是删除了非类别代码。非类别代码的代码如下:
CATCOD IN ('0', '114', '214', '314', '414', '614')
因此,CATCOD
列中的任何数字都被视为非cat代码。
否则,如果它们被包括在内,就好像它们不在where子句中一样,它们被认为是猫代码。所以这是我最后两个左连接中的where子句:
AND CASE
WHEN il.CATCOD IN ('0', '114', '214', '314', '414', '614')
THEN 'NonCAT'
ELSE 'CAT'
END = @NonCAT
如果我尝试提取类别代码@NonCAT
变量只是varchar(20)
并且为了测试而将其设置为'NonCAT'作为其值,则此工作正常。有了where子句,我将提取非cat代码。
我想要一个条件语句,比如变量@NonCAT = 'CAT'
,我想省略where子句。我该怎么做呢?我已经尝试了各种案例陈述,它比听起来更难。非常感谢帮忙。
编辑:我尝试在where子句中使用iff
语句,例如
AND (IF @NonCAT = 'NonCAT'
BEGIN
CASE
WHEN il.CATCOD IN ('0', '114', '214', '314', '414', '614')
THEN 'NonCAT'
ELSE 'CAT'
END = @NonCAT
END)
似乎不起作用。我可以在代码的最前端使用IF语句作为标志,但这似乎不是非常有效,因为如果有意义的话,我必须在没有where子句的情况下重写整个事件。
答案 0 :(得分:0)
你的意思是这样的吗?
WHERE ( ( @nonCAT = 'nonCAT' AND il.CATCOD IN ('0', '114', '214', '314', '414', '614') )
OR ( (ISNULL(@nonCAT,'') <> 'nonCAT' ))