使用 LIKE 或 CONTAINS 在 SSRS 中的一列中搜索两个不同的列

问题描述 投票:0回答:1

大家好,我想使用 Like 或 contains 语句检查两列是否包含在另一列中。在 ssrs 报告中

例如:

第 1 列是名称 第 2 列是姓氏 第 3 列是全名 那么我该如何检查第 1 列或第 2 列是否在第 3 列中

这是我迄今为止一直在使用的: iif((Fields!column3.value).lower().tostring.contains(lcase("" & (Field!column1.value)&"") 或 (Fields!column3.value).lower().tostring .contains(lcase("" & (Field!column2.value)&""),"是","否")

reporting-services visual-studio-2019 reporting
1个回答
0
投票

不用担心这个答案的长度,你需要的表达就在最后,但我想告诉你整个过程......

让我们将以下数据集查询作为我们的示例数据

SELECT 'Dave' as column1, 'Smith' as column2, 'Dave Smith' as column3
UNION SELECT 'Bob', 'Jones', 'Bob'
UNION SELECT 'John', 'Smith', 'Mark Moore'
UNION SELECT 'Harry', 'Lomax', 'Mike Lomax'
UNION SELECT 'Rob', 'Taylor', 'Robin Banks'

使用基本表达式,我们可以测试第 1 列或第 2 列中的值是否在第 3 列中。

= IIF(
        LCASE(Fields!column3.Value).Contains(RTRIM(LTRIM(LCASE(Fields!column1.Value))))
        OR
        LCASE(Fields!column3.Value).Contains(RTRIM(LTRIM(LCASE(Fields!column2.Value))))
        , "Yes"
        , "No"
        )

在这里,我已将值设置为小写,并在比较之前修剪了第 1 列和第 2 列值的尾随空格和前导空格。

这在一定程度上有效,但正如您在最终结果(如下)中看到的那样,找到了“Rob”,而第 3 列中的实际名称是“Robin”。此结果显示在“test1”中

为了解决此问题,我使用

space
作为分隔符拆分全名,然后使用管道
|
符号将生成的数组再次连接在一起。我也使用这个表达式将整个东西包裹在管道符号中

="|" & JOIN(SPLIT(Fields!column3.Value, " "),"|") & "|"

您可以在“test2”中看到结果。

最后在 test3 中,我组合了两个表达式,并用管道包裹了第 1 列和第 2 列值。这意味着我们可以正确处理开头和结尾匹配的名称。

这是最终的表达方式

= IIF(
        LCASE("|" & JOIN(SPLIT(Fields!column3.Value, " "),"|") & "|").Contains("|" & RTRIM(LTRIM(LCASE(Fields!column1.Value))) & "|")
        OR
        LCASE("|" & JOIN(SPLIT(Fields!column3.Value, " "),"|") & "|").Contains("|" & RTRIM(LTRIM(LCASE(Fields!column2.Value))) & "|")
        , "Yes"
        , "No"
        )

这给出了以下结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.