我有一个带有数据集的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。
答案 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
答案 1 :(得分:0)
您可能需要根据您的要求为该功能添加REPLACE。