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

时间:2018-05-07 15:17:46

标签: sql-server reporting-services where-in

我有一个带有数据集的SSRS报告,其查询类似于此(简化为查询要复杂得多):

select * 
from myTable 
where country in (@Country)

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

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

因此,例如,如果选择US作为其中一个基本上只是取代加拿大'加拿大的国家/地区,我们需要将所有属于加拿大的记录汇总到美国。与美国'在返回的数据集中,使用REPLACE甚至CASE语句很容易实现。但是,在查询中使用WHERE子句会有点棘手。有没有人知道如何用另一个字符串替换字符串,以便IN运算符理解它?

如果我只是做这样的事情:

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

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

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

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

它返回正确的数据行。我想我正在寻找一种方法来加入多个值,以便IN运营商正确理解它。

TIA, -TS。

2 个答案:

答案 0 :(得分:1)

您可以使用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

这是一个小提琴:http://sqlfiddle.com/#!18/b7f49/4

答案 1 :(得分:0)

可能与SQL in (@Variable) query

的答案相同

您可能需要根据您的要求为该功能添加REPLACE。