对不起,我没有完整的查询,因为我的原文实际上很长,但我觉得你可以找到我的语法错误。基本上我声明了2个变量,如果一个变量是空白,我需要将where语句放在字段不在另一个变量中的位置。
Where dnCP_FromServiceDate >= '01/01/2016' And
dnCP_FromServiceDate <= '01/31/2016' And
dnCP_RecordStatus <> 'V'
AND CASE WHEN @inpDXIN = '' THEN
predxDiagnosisCode not in (@inpDXNOTIN)
ELSE predxDiagnosisCode IN (@inpDXIN)
END
即使我可以使用类似的声明获得一个查询片段,我可以想出我的但我无法找到类似的东西。非常感谢任何帮助
答案 0 :(得分:1)
通常,您不希望在case
子句中使用where
。相反,只需使用常规布尔逻辑:
Where dnCP_FromServiceDate >= '2016-01-01' and
dnCP_FromServiceDate <= '2016-01-31' and
dnCP_RecordStatus <> 'V' and
( (@inpDXIN = '' and predxDiagnosisCode <> @inpDXNOTIN) or
(@inpDXIN <> '' and predxDiagnosisCode IN (@inpDXIN)
)
注意:
IN (@var)
与= @var
相同。您无法通过变量传递in
列表。如果您需要该功能,请询问其他问题。case
返回布尔表达式。以上解决了这个“限制”。