0

我正在处理这个 SSRS 报告,用户要求我创建一个包含三个参数的报告:学期、学生状态和录取通知书。

描述:有以下不同的录取通知:
拒绝 - 计划费用 拒绝 - 其他拒绝 - 接受的计划/时间 拒绝 - 在另一所学校注册 拒绝 - 计划适合/教育需求 延期 拒绝 - 财务支持

当学生/招生人员回复报价时,它会被记录在杂项表中。但是,如果未捕获响应,则不会创建记录。

用户希望我也希望我包括尚未回复报价的学生。这样想很容易,这就是我所做的:

使用用户要求的三个参数创建了一个存储过程。--在这个存储过程中,为了允许参数有多个值,我使用了以下函数:

CREATE FUNCTION CSVToVarChar (  
@List VARCHAR(8000),  
@Delimiter CHAR(1) = ','  
)   
RETURNS TABLE  

AS  
RETURN SELECT CAST(SUBSTRING(@Delimiter + ISNULL(@List,'') + @Delimiter, Number + 1,     CHARINDEX(@Delimiter, @Delimiter + ISNULL(@List,'') + @Delimiter, Number + 1)  - Number - 1) AS VARCHAR(8000)) AS String  
FROM dbo.fff_Number WITH(NOLOCK)  
WHERE SUBSTRING( @Delimiter + ISNULL(@List,'') + @Delimiter, Number, 1 ) = @Delimiter  
    AND Number < LEN( @Delimiter + ISNULL(@List,'') + @Delimiter )    

这个函数在 sp 的 where 子句中是这样使用的:

 AdmissionOffer IN (SELECT string
                       FROM
                           dbo.CSVToVarChar(@AdmissionOffer, ','))

接下来,我开始创建报告:在报告中,我使用以下查询为 admissionoffer 参数创建了一个数据集以获取我的参数值:

SELECT distinct ISNULL(attributevalue, 'No Response') as AdmissionOffer from table....

我还允许在 ssrs 中为这个参数设置多个值。用户会将 lov 中的 null 视为“无响应”。

我需要帮助:

如何创建一个可以使用多个值的报告/存储过程(不确定我需要在哪里进行更改),而空值就是其中之一。当我运行报告时,我什么也没得到。如果我从 ssrs 中的录取报价 LOV 中删除“无响应”值,则报告工作正常。

4

1 回答 1

0

嗯,你需要知道的基本事情是,在将参数传递给过程时,NULL 和 NOT NULL 永远不会混合。

现在解决这个问题 - 如果字符串拆分的实际值为“NULL”,那么我在拆分函数中将其转换为 NULL。(可以是任何东西,但 'NULL' 似乎应该是使用的那个)。对我来说,这就像将我的参数的 SQL 更改为联合另一个值一样简单 - 不确定你是如何得到你的。

现在因为 IN() 函数在其中也不能使用 NULL 值,所以为了解决这个问题(在我看来,这可能是一个更好的选择)是我内部加入了拆分表以进行过滤。

SELECT *
FROM table a
INNER JOIN dbo.ufn_split(@list,'|') s ON a.pkey = s.value
于 2013-04-13T00:59:49.397 回答