SQL Server/SSRS 2005参数和NULL的案例评估
我有一个似乎过于简单化的问题,但它妨碍了我需要做的事情 本质上,我希望在SQL中计算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) 当我这么做的时候,它很好地吸引了史蒂夫·史密斯,但却没有吸
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”,但它仍然不喜欢它。