sql-server - 将子查询的结果连接成一个值
问题描述
我有一个存储过程,我正在构建一个报告,我遇到了一个希望得到解决的小问题。
存储过程只接受一个参数:
@nID varchar(max)=null
此参数可以是 NULL,有 1 个值 = '1' 或多个值 '1,3'
我有一个拆分函数,所以一个可能看起来像这样的参数:'1,3,5'会将它变成'1','3','5'。
这是我的选择语句(子查询)的一部分
Select Value1,
(select tblIns.nDesc from tblIns where tblIns.nID in (SELECT items FROM
dbo.SplitFunction(@nID, ',', 'nID'))) as 'Description'
From ....
Where ....
只要我在参数中只传递了 1 个值,查询就可以正常工作@nID
,但是,当我传递多个值时,会出现以下错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
我的目标是,能够连接子查询结果,这样如果我传入超过 1 个值,则'Description'
看起来像这样
Text1, Text2, Text2
这样的事情可行吗?或者这会涉及更多的工作。
如果没有子查询,我可以将任意数量的值传递给 SP,它会产生正确的结果,我只需要获取参数的 TEXT 描述并将它们全部连接在一列中。
编辑说明:
tblIns
nID nDesc
1 Text1
2 Text2
假设我将值“1,2”作为参数传递到存储过程中,我希望得到的结果:
Value1 Description
Test Text1, Text2
解决方案
要将其放入变量中,这将在每个值和逗号分隔符周围放置单个引号:
DECLARE @OUTPUT as varchar(MAX)
Set @OUTPUT = ''
SELECT @OUTPUT = @OUTPUT + case when @OUTPUT = '' then '' else ', ' end + '''' + rtrim(TableValue) + ''''
FROM dbo.Table
select @OUTPUT
-- 或者你可以像这样内联:
Select STUFF((
SELECT ',' + TableValue
FROM dbo.TableLookup
FOR XML PATH('')), 1, 1,'')
FROM dbo.TableLookup
推荐阅读
- cordova - 带有cordova的文件传输下载方法在错误消息中返回未定义未定义
- r - 用其他列的信息替换 0[dplyr]
- python - 如何在 Django 中提供 zip 文件下载?
- css - 如何在css中一个一个地垂直显示项目?
- python - 检查值是否满足 Django 模型的条件
- python - ImportError:无法导入名称“relu6”和 AttributeError:模块“keras.applications.mobilenet”没有属性“relu6”
- sql - 基于持续时间的给定一天分钟的 SQL 更新计数器(按顺序)
- android - Web Worker 是在主 ui android 线程还是单独的线程上运行?
- amazon-web-services - 无法删除 S3 对象,“拒绝访问”
- wix - 在 WinpE 中运行 Wix MSI 安装