我不确定我是否不理解正确找到的示例..或者如果我在这里做了其他错误...但我试图将我的查询结果返回为:
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)中的“链接”。 但似乎是完整的..
这是否可以接受?
答案 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版本,以便我们进行修改。