我有这个查询,可以根据多个条件为我计数。
WHERE
*Other conditions*
AND ((WORKTYPE = 'SS' AND TOT_SUBTYPE IN ('SSSERREN', 'SSERRLT') AND TOT_TASKTYPE = 'CONS')
OR ISNULL(TOT_TASKTYPE,'CONS') IN ('CONS','CONSX'))
上面的语句将过滤除'WORKTYPE ='SS'AND TOT_SUBTYPE IN('SSSERREN','SSERRLT')'以外的所有内容的CONS,CONSX和NULL,并且仅过滤'CONS'
我的问题是,当工作类型为SS且TOT_TASKTYPE为SSSERREN和SSERRLT时,它在输出中提供了额外的一行,包括TOT_TASKTYPE ='CONSX'。
我尝试按如下所示修改查询:
((WORKTYPE = 'SS' AND TOT_SUBTYPE IN ('SSSERREN','SSERRLT') and
TOT_TASKTYPE = 'CONS')
OR
(WORKTYPE NOT IN ('SS'))
AND
ISNULL(TOT_TASKTYPE,'CONS') IN ('CONS','CONSX'))
此查询为我提供了前面提到的条件的正确选项,但它从我的输出中删除了工作类型为'SS'的其他行项。
我进一步更改了查询,使其不同时包含在WORKTYPE和TOT_SUBTYPE中,但是要花很多时间才能执行。我不确定这是否可以提供所需的输出。
((WORKTYPE = 'SS' AND TOT_SUBTYPE IN ('SSSERREN','SSERRLT') and
TOT_TASKTYPE = 'CONS')
OR
(WORKTYPE NOT IN ('SS') AND TOT_SUBTYPE NOT IN ('SSSERREN','SSERRLT')
AND
ISNULL(TOT_TASKTYPE,'CONS') IN ('CONS','CONSX'))
还有其他方法可以修改代码,而不是使用“不输入”来解决我的问题吗?
答案 0 :(得分:0)
还有另一种修改代码的方式,而不是使用NOT IN
我建议在not exists
上使用in
我发现not exists
的大部分时间表现都更好。