操作要在 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
我有一个带有数据集的 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