我正在处理SQL中的select语句,并遇到试图创建包含case语句或if else语句的where子句的问题。我想根据变量的值选择记录。如果变量为'True',那么只返回列为空的select语句中的记录。如果变量不是“真”,则返回所有记录,无论该列是否为空。基于变量的动态where子句
有关如何做到这一点的任何提示?
下面是什么,我试图做一个简单的例子:
declare @option1 as varchar(5)
--This can be True or False so to test i just put the Set option below
set @option1 = 'True'
Select a,b,c,d...
from ...
where d = case when @option1 = 'True' then NULL End
这是我不知道该怎么做的部分。我只需要过滤掉记录,如果变量是'真',所以不知道该怎么把案件的其他部分。
在WHERE子句中我写的,如果@选项1是“真”和d不为空,则记录将被排除在外。我非常肯定这正是OP所要求的...... – PinnyM
如果我理解OP的问题(并且它是解释性的!),则Option1不是表中的字段,因此,Option1的状态对记录的过滤。在您提出的WHERE子句中,无论Option1的值如何,都将包含d IS NOT NULL的所有行,并且其中始终包含d IS NULL的所有行。没有过滤(除非我错过了一些愚蠢的东西,这完全有可能)。 – XIVSolutions
@PinnyM - 我相信你的第二个选择可以做到这一点。 – XIVSolutions