0

我正在构建 SSRS 中的报告之一,其中参数值可以是 NULL 也可以包含 NON-NULL 值。

现在,如果用户选择的值为 NULL(来自下拉列表),那么 SQL 查询将是

field-Name IS NULL

如果用户选择的值是 NULL 以外的任何值,则 SQL 查询将是

field-Name IN (@parameter-values)

我需要使用 Case-When 将此条件放在 WHERE 子句中,以便用户给出的任何输入都由 SQL 查询处理并返回适当的结果。用户可能会从下拉列表中同时选择 NULL 和 Non-NULL 值。

请指导如何将“案例”条件放在 where 子句中或是否存在任何其他解决方案

更新

WHERE @IR_Project_Type = 
    (
        CASE WHEN ([IR Project Type] = NULL) THEN ([IR Project Type] IS NULL)
        END 
    )

// 'IS NULL' 条件会引发错误。

4

5 回答 5

1
WHERE ((@IR_Project_Type IS NULL AND [IR Project Type] IS NULL) OR [IR Project Type] = @IR_Project_Type)
于 2012-11-20T09:20:04.703 回答
1

您是否承认空字符串作为字段名称中的值?如果不:

declare @val varchar(20) = null

select *
from something
where
  ISNULL(@val,'') = ISNULL(fieldName,'');


declare @val varchar(20) = 'aaa'

select *
from something
where
  ISNULL(@val,'') = ISNULL(fieldName,'');

SQLFiddle

编辑:或只是:

declare @val varchar(20) = 'aaa'

select * 
from something
where
  (case when @val is null 
     then 
       (case when fieldName is null then 1 else 0 end)
     else
       (case when fieldName = @val then 1 else 0 end) end) = 1

SQLFiddle

请找到我的查询。

WHERE (case when @IR_Project_Type is null 
         then 
           (case when [IR Project Type]  is null then 1 else 0 end)
         else
           (case when [IR Project Type]  = @IR_Project_Type then 1 else 0 end) end) = 1
于 2012-11-20T09:09:44.293 回答
0

尝试这个:

WHERE  [IR_Project_Type] = 
    (
        CASE WHEN Isnull(@IR_Project_Type, '') = '' THEN NULL ELSE @IR_Project_Type
        END 
    )
于 2012-11-20T09:40:52.630 回答
0

你能用厚脸皮的OR吗?

WHERE (Field-Name IS NULL OR Field-Name = @parameter)
于 2012-11-20T09:08:39.720 回答
0

SSRS 多值参数很难(如果可能的话)包含null值。

我通常的解决方法是使用标准替换字符串作为替换NULL,例如"<No Value>"

然后你的 SQL 查询可以写成

WHERE
  [IR_Project_Type] in ( @IR_Project_Type )
  OR (
     '<No Value>' in ( @IR_Project_Type )
     AND [IR_Project_Type] is NULL
     )

这在尝试处理 true NULLs 时省去了很多麻烦。

于 2012-11-20T19:37:27.330 回答