MS SQL +输出查询为分隔字符串

时间:2018-04-06 19:21:13

标签: sql sql-server string delimited

我不确定我是否不理解正确找到的示例..或者如果我在这里做了其他错误...但我试图将我的查询结果返回为:

1。)一个长分隔的字符串 2.)删除返回数据末尾的尾随分隔符

表有几列,但我只抓取ID和公司名称。

我正朝着以下结果努力: ID0 | NAME0 | ID1 | NAME1 | ID2 | NAME2 ...等等。

使用此:

SELECT (ID + '|' + COMPANY + '|') AS ORGLIST 
FROM vw_PreferredMail
WHERE member_type = 'CTR' 
ORDER BY ID 

我得到的是:

ID0 | NAME0 ID1 | NAME1 ID2 | NAME2

都在他们自己的行..

使用此:

DECLARE @OrgResults varchar(255)
SELECT @OrgResults = ID + '|' + COMPANY
FROM vw_PreferredMail
WHERE member_type = 'CTR' 
ORDER BY ID 
SELECT SUBSTRING(@OrgResults, 1, LEN(@OrgResults) - 1);

我只返回了最后一行..

如何将它全部放在一个分隔的“行”中..(同时修剪掉最后一个分隔符?或者首先是否需要更改它?)

更新:

这种方法“似乎”工作..(当前检查SSMS)..在添加我的真实项目之前

SELECT (ID + '|' + COMPANY)
FROM vw_PreferredMail
WHERE member_type = 'CTR'
ORDER BY ID 
FOR XML PATH('');

结果,看起来像SSMS(SQL Server Management Studio)中的“链接”。 但似乎是完整的..

这是否可以接受?

2 个答案:

答案 0 :(得分:1)

你原来很亲密;简单的错误,你没有保留@OrgResults的价值,而是替换它。

您正在@OrgResults=...,而不是@OrgResults=@OrgResults+...。您还需要在开始连接之前设置@OrgResults='',否则最终会得到NULL结果。

快速修复:

DECLARE @OrgResults varchar(255)
SET @OrgResults=''

SELECT @OrgResults = @OrgResults + ID + '|' + COMPANY + '|'
FROM vw_PreferredMail
WHERE member_type = 'CTR' 
ORDER BY ID 

SET @OrgResults = LEFT(@OrgResults, LEN(@OrgResults)-1);
SELECT @OrgResults

警告,255不多,你可能会开始截断。你可能需要延长它。

答案 1 :(得分:0)

你没有指定你正在使用哪个SQL,但如果是MySQL,我会按照以下方式将结果与你想要的格式相同:

SELECT concat(concat(concat(id ,"|"),COMPANY ),"|") AS ORGLIST 
FROM vw_PreferredMail
WHERE member_type = 'CTR' 
ORDER BY ID 

让我们详细了解您的要求和SQL版本,以便我们进行修改。