我正在构建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'条件会抛出错误。
答案 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,'');
编辑: 或者只是:
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
请填写我的查询。
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
时遇到很多麻烦。