操作要在 IN 运算符(SQL、SSRS)中使用的字符串

Manipulate a string to be used in IN operator (SQL, SSRS)

我有一个带有数据集的 SSRS 报告,它的查询看起来像这样(简化了,因为查询比这个复杂得多):

select * 
from myTable 
where country in (@Country)

@Country是一个参数,可以有多个值

它工作正常,但我们被要求将所有值从一个国家汇总到另一个国家(该国家不在要选择的参数列表中)。

因此,例如,如果美国被选为国家之一,我们需要将属于加拿大的所有记录汇总到美国,基本上只是将数据集中的 'Canada' 替换为 'US' returned 使用 REPLACE 甚至 CASE 语句很容易实现。但是,查询中的 WHERE 子句有点棘手。有谁知道如何用另一个字符串替换一个字符串以便 IN 运算符能够理解它?

如果我简单地做这样的事情:

select * 
from myTable 
where country in (replace(@Country, 'US', 'US,Canada'))

查询没有 return 任何内容,我理解其背后的原因。

如果我像这样测试这个硬编码值:

select * 
from myTable 
where country in ('US', 'Canada')

它 return 是正确的数据行。我想我正在寻找一种连接多个值的方法,以便 IN 运算符能够正确理解它。

TIA, -TS.

可能与 SQL in (@Variable) query

的答案相同

您可能需要根据您的要求向该函数添加 REPLACE。

您可以使用 Dynamic SQL 来实现这一点。您需要做的就是在第一行的声明中传递国家名称。

看下面的代码:

DECLARE @SQL NVARCHAR(2000), @Country VARCHAR(30) = 'Canada'

SELECT @SQL = CONCAT('
    select 
        * 
    from myTable 
    where country in (', 
    CASE WHEN @Country = 'US' THEN '''US'', ''Canada''' else '@Country' end , ')'
)

EXEC sp_executesql @SQL, N'@Country VARCHAR(30)', @Country = @Country

这是一个 fiddle :http://sqlfiddle.com/#!18/b7f49/4