在条款中的条件

时间:2012-11-20 08:55:34

标签: sql-server sql-server-2008 ssrs-2008 reporting-services

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

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

field-Name IS NULL

如果user选择的值是除NULL之外的任何值,则SQL Query将是

field-Name IN (@parameter-values)

我需要将这个条件放在WHERE子句中使用Case - 当这样无论用户给出什么输入时,它都由SQL Query处理,并返回适当的结果。用户可能会从下拉列表中选择NULL和非NULL值。

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

更新

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

//'IS NULL'条件会抛出错误。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

WHERE ((@IR_Project_Type IS NULL AND [IR Project Type] IS NULL) OR [IR Project Type] = @IR_Project_Type)

答案 2 :(得分:0)

你能用厚颜无耻的OR吗?

WHERE (Field-Name IS NULL OR Field-Name = @parameter)

答案 3 :(得分:0)

试试这个:

WHERE  [IR_Project_Type] = 
    (
        CASE WHEN Isnull(@IR_Project_Type, '') = '' THEN NULL ELSE @IR_Project_Type
        END 
    )

答案 4 :(得分: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
     )

这样可以避免在尝试处理真正的NULL时遇到很多麻烦。