如何使用NULL值SSRS参数来检索包含NULLS的行



我读过很多关于NULLS和SSRS报告参数的文章,但似乎没有一篇能解决我的问题。

我有一个用户可选择的SSRS报告参数@NoteType,它可以是1、3、4或NULL。我正在使用的数据库表(eventText(有一列NoteValue,其中包含这4个值中的1个。不幸的是,我无法更改表的设计以用整数代替NULL值。

如果@NoteType = 1, 3 or 4;但如果CCD_ 8。如果是@NoteType = NULL,那么,根据我的参数化WHERE子句(下面讨论(,我的报告要么没有行,要么有NoteValue = 1, 3 or 4的所有行。如果用户选择@NoteType = NULL,我不知道如何检索NoteValue = NULL所在的行。

我已经将@NoteType参数配置为允许NULL值,其中Note Value作为参数的值字段,Note Type作为标签字段。参数值是从UNION查询中获得的:

SELECT      ett.NoteValue         AS    [Note Value],
ett.NoteDescription   AS    [Note Type]
FROM        eventTextType    ett
UNION       
SELECT      NULL                  AS    [Note Value],
'Blank'               AS    [Note Type]
ORDER BY    [Note Type]

eventTextType表只有3行,其中NoteValue列值分别为1、3或4。在eventTextType表中没有NoteValue = NULL的行,但在eventText表中有许多这样的行。这就是为什么我使用UNION查询来包括NULL作为@NoteType参数值之一。

UNION查询的输出为:

Note Value  Note Type
4           Annuity 
1           Balance
NULL        Blank
3           Division

我怀疑问题出在WHERE子句中,该子句使用@NoteType参数来检索报表的行。以下是我尝试过的:

WHERE et.NoteValue = @NoteType—适用于@NoteType=1、3或4;但如果@NoteType=NULL ,则不返回任何行

WHERE et.NoteValue = IIF(@NoteType IS NULL, NULL, @NoteType)——相同结果

WHERE et.NoteValue = CASE WHEN @NoteType IS NULL THEN NULL ELSE @NoteType END——相同的结果(预期,因为这相当于IFF版本(

WHERE et.NoteValue = COALESCE(@NoteType, et.NoteValue)——适用于@NoteType = 1, 3 or 4;但是如果@NoteType = NULL返回NoteValue列值为1、3或4的所有行,但没有行NoteValue列值=NULL

我应该使用什么WHERE子句?

假设主数据集的数据集是一个数据集查询(而不是存储过程(,那么我只需将一个有效的参数值(我在这个示例中使用了0(添加到参数列表中,并在数据集查询中替换它。

因此,更改为提供参数值的数据集查询

SELECT      ett.NoteValue         AS    [Note Value],
ett.NoteDescription   AS    [Note Type]
FROM        eventTextType    ett
UNION       
SELECT      0                     AS    [Note Value],
'Blank'               AS    [Note Type]
ORDER BY    [Note Type]

现在,在您的主数据集查询中,您可以将where子句更改为这个(如果需要,它还将处理多值参数(

WHERE ISNULL(et.NoteValue, 0) IN(@NoteType)

除非我错过了一些明显的东西,否则应该是这样。

相关内容

  • 没有找到相关文章

最新更新