SQL Server/SSRS 2005参数和NULL的案例评估

SQL Server/SSRS 2005参数和NULL的案例评估,sql,sql-server,null,case,reportingservices-2005,Sql,Sql Server,Null,Case,Reportingservices 2005,我有一个似乎过于简单化的问题,但它妨碍了我需要做的事情 本质上,我希望在SQL中计算CASE语句时显示所有记录(包括null)。现在它过滤掉了空值 桌子 fname | lname 史蒂夫·史密斯 空|琼斯 查询: SELECT fname, lname FROM users WHERE fname = (CASE WHEN @param = 'All' THEN fname ELSE @param) 当我这么做的时候,它很好地吸引了史蒂夫·史密斯,但却没有吸

我有一个似乎过于简单化的问题,但它妨碍了我需要做的事情

本质上,我希望在SQL中计算
CASE
语句时显示所有记录(包括null)。现在它过滤掉了空值

桌子

fname | lname 史蒂夫·史密斯 空|琼斯

查询:

SELECT 
    fname, lname 
FROM 
    users 
WHERE 
    fname = (CASE WHEN @param = 'All' THEN fname ELSE @param)
当我这么做的时候,它很好地吸引了史蒂夫·史密斯,但却没有吸引琼斯。我真的想让琼斯作为一个更大的记录集的一部分出现

我正在寻找的结果集是:

STEVE SMITH
      JONES
我是在SSRS2005报告中这样做的,即使只是因为@parameter='All'默认情况下进入报告,它也不会显示在我将参数反弹到的特定列中有空值的记录

提前谢谢

只是根据回复补充一下

我正在对进入SQL的@param进行评估。因此,当它“全部”时,我为fname=fname制定标准。它应该取消它并返回所有内容(就像没有标准一样),只有当@param中有一个名称时,我才使用它作为标准

WHERE fname = (CASE WHEN fname = 'All' THEN fname ELSE @PARAM END)
我想说的是:

WHERE fname = (CASE WHEN fname = 'All' THEN (fname OR NULL) ELSE @PARAM END)

使用
,因为没有任何内容等于
NULL

WHERE 
    @param = 'All'
OR
    fname = @param

尝试添加一些类似于

SELECT 
    isnull(fname, ''), 
    isnull(lname, '') 
FROM 
    users 
WHERE 
    fname = (CASE WHEN @param = 'All' THEN fname ELSE @param)

这可能有助于显示空值

,或者可以简化条件,而无需使用out case

SELECT 
    fname, lname 
FROM 
    users 
WHERE 
   ( @param = 'ALL' OR fname = @param )

如果没有显式检查空值(或执行isnull),SQL server是否会忽略与空值的比较

我会试着去掉所有的空值,看看这是否能得到你想要的结果,然后检查并去掉你不需要的isnulls

SELECT fname, lname
FROM users
WHERE isnull(fname, '') = (CASE WHEN isnull(@param, '') = 'ALL' THEN isnull(fname, '') ELSE isnull(@param, '') END)

好吧,我找不到解决这个问题的SQL解决方案,但在SSRS中我找到了一种绕过它的方法,因为这是一个经过SSRS的报告

在前端表tablix上,我应用了带条件的过滤器

=iif(Parameters!RPfname.Value="All", Parameters!RPfname.Value,Fields!fName.Value) = =Parameters!RPname.Value
这将从数据库端取出对fname的评估,并将其放在前端。根据参数中显示的值选择参数时,将过滤记录

如果将其设置为ALL,则只显示字段,不进行任何筛选或计算


谢谢大家的努力。

没有根据值测量@param。如果@param为“all”,则应返回所有行,否则它将返回
fname
与param匹配的任何行,这不是您想要的吗?嗯。这不是我正在使用的逻辑,也不会起作用。我正在评估一个参数。根据fname计算fname应该将它们作为一个条件取消,但它不会返回nullvalues@10tTiger,如果fname为nULL,则不能使用=,因此它不会返回该值。我之前尝试过这个,但它仍然不喜欢。实际上,我在字段中填充了“Test”,但它仍然不喜欢它。