sql-server - 操作要在 IN 运算符(SQL、SSRS)中使用的字符串
问题描述
我有一个 SSRS 报告,其数据集的查询看起来像这样(简化为查询比这复杂得多):
select *
from myTable
where country in (@Country)
@Country
是一个参数,可以有多个值
它工作正常,但我们被要求将所有值从一个国家汇总到另一个国家(该国家不在要选择的参数列表中)。
因此,例如,如果美国被选为国家之一,我们需要将属于加拿大的所有记录汇总到美国,基本上只是在返回的数据集中用“美国”替换“加拿大”,这很容易使用 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。
解决方案
您可以使用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
推荐阅读
- python - 如何将一个类元素连接到另一个类?
- javascript - 使用 setTimeout() 后将组件返回到原始状态或强制重新渲染
- python - 来自 3D 阵列的 3D 切片
- python - 将函数应用于熊猫数据框的列
- python-3.x - 'python3' 不被识别为内部或外部命令?
- javascript - 如何对 Json 使用排序功能?
- regex - AMFI 的 KmyMoney 在线报价
- javascript - 使用 Gulp 将字符串替换为数组中的值
- python - 如何使用 PYQT5 和 Python 3 从菜单中使用 mdiArea 将一个窗口放在另一个窗口中?
- asp.net-core - 将模型传递给 ASP.NET Core MVC 中的视图