我正在處理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