我在SSRS中编写的查询的一部分不能像我需要的那样工作。情况是我正在尝试使用列中的值列表创建一个下拉参数 - 我们将其称为Column5。问题是该列中的某些行是空白的;它们不是空的,它们完全由空白组成。因此,它们不会显示在参数的值列表中,这意味着这些行将被完全忽略。
我想做的是这样的事情:
SELECT [...stuff...] CASE WHEN (RTRIM(LTRIM(Column5)) = '') THEN 'None' ELSE Column5 END AS ColumnAlias
我已经尝试了上面的内容和一些变体,但似乎没有任何效果。
注意:我将上述查询粘贴到SQL Server中,它运行得很好。似乎SQL Server和SSRS以不同的方式处理空白。
编辑:显然,部分问题是SQL不会根据重命名的列进行过滤。我将查询粘贴到SQL Server中,并包含WHERE Column5 = 'None'
。它没有返回任何行,即使在Column5中有几千行明确表示“无”。似乎我可能不得不重新考虑我的整个方法。
答案 0 :(得分:0)
试试这个:
SELECT [...stuff...] CASE WHEN LEFT(Column5, 1) = ' ' or RIGHT(Column5, 1) = ' ' THEN 'None' ELSE Column5 END AS ColumnAlias
原因是当您指定条件时,将忽略尾随空格。换句话说,“HI”,“hi”和“Hi”(后面有空格)都被认为是相等的。
答案 1 :(得分:0)
我知道这是一篇较老的帖子,但万一你仍然遇到麻烦......
我已经看到空字符串或空格字符串似乎在不同的系统中处理和识别(Access SSRS vs SSMS中运行的T-SQL)。我发现使用len()函数在任何地方都能很好地工作。我通常会做以下事情:
Case
When ISNULL(LEN(LTRIM(RTRIM([Column5]))),0) = 0
Then 'None'
Else [Column5]
End
这样,在您移除所有垫片后,它会主动寻找并计算字符数。
一旦确定了这些字段,就可以将整个查询(假设它并不过分复杂)放入CTE并使用最终产品。这有时比尝试使用数据时更容易。
With Selected_Records as (
Select ...
...
)
Select Distinct Column5
From Selected_Records
然后,您可以在派生数据之上添加任何其他条件,排序或聚合,而不会妨碍其派生。这种方法非常有效,直到CTE中的查询变得非常复杂或使用了许多参数(这些都是轶事观察)。
希望这有助于某人。