我有一个报告,其中有一个参数,我需要能够将NULL的实际值作为一个选项进行选择并实际返回结果,但无法弄清楚。
一些背景(我在这里过于简化以使其更清晰):
表Major_Grp有5个值,C,P,R,S和W以及相应的构造,植物,零售,种子和批发的描述。但是,Order_Line中的记录很可能将NULL作为Major_Grp中的值。我需要能够自己选择只有NULL的记录,如果我选择C,P,S,R或W,则不要包括它们。
Major_Grp的参数设置为Allow Nulls
(无空格,无多个),并使用MajorGrp数据集中的查询加载可用值和默认值。在我的MajorGrp数据集中,我有以下内容:从major_grp中选择distinct major_grp,major_grp_desc
UNION选择NULL,' Prelim'
当我打开下拉列表时,我会看到"施工","植物","零售","种子",&#34 ;批发和" Prelim"。当我选择其中一个真实值(即" Plants")时,该报告有效,但如果我选择" Prelim"并且只想获得真正为NULL的记录,不返回任何内容。我试过Select'(NULL)'和' NULL'也没有运气。
在我的数据集中检索Order_Line(ol)数据,如果我使用(ol.major_grp IN (@MajorGrp) OR ol.major_grp IS NULL) and
,我每次都会得到NULL记录以及我选择的真实组;如果我只使用(ol.major_grp IN (@MajorGrp)) and
,当我选择单个实际值时,我得到具有实际值的Order_Line记录,但是如果我尝试" Prelim"只获得NULLS,不会返回NULLS。
这不是我想要NULL来获取所有内容的情况,我真的想要获得其中包含真实MajorGrp(C,P,R,S或W)或者为NULL的Order_Line记录。
答案 0 :(得分:1)
你真的很亲密。
而不是(ol.major_grp IN (@MajorGrp) OR ol.major_grp IS NULL) and ...
试试(ol.major_grp IN (@MajorGrp) OR (ol.major_grp IS NULL and @MajorGrp IS NULL)) and ...
如果你真的通过你的参数获得null,这应该可以工作。有时这可能很难控制,所以有时我会作弊并使用"<No Value>"
之类的字符串而不是NULL。然后我可以这样做:
(ISNULL(ol.major_grp, '<No Value>') IN (@MajorGrp)) and ...
如果"<No Value>"
是@majorgrp的有效值,这当然不会起作用。