SELECT [UserID],
STUFF((SELECT ', ' + UserID
FROM #RelatedIDs
WHERE (UserID = t.UserID)
FOR XML PATH('')) ,1,1,'') AS RelIDs
FROM #RelatedIDs t
GROUP BY UserID
SELECT [UserID],
STUFF((SELECT CONCAT(', ', UserID)
FROM #RelatedIDs ri
WHERE ri.UserID = t.UserID
FOR XML PATH('')
), 1, 2, '') AS RelIDs
FROM #RelatedIDs t
GROUP BY UserID;
SELECT [UserID],
STUFF((SELECT ',' + CAST(UserID as VARCHAR(100))
FROM #RelatedIDs
WHERE (UserID = t.UserID)
FOR XML PATH('')) ,1,1,'') AS RelIDs
FROM #RelatedIDs t
GROUP BY UserID
2条答案
按热度按时间vuv7lop31#
使用
CONCAT()
而不是+
:注意,我还更改了参数的内容
1, 1
至1, 2
. 那是因为逗号后面有空格。你的关联从句还表明,当你让它起作用时,结果不会很有趣。
ffvjumwh2#
你可以的
cast
varchar的整数值:如果您运行的是最新版本的sql server(2017或更高版本),那么您可以使用
string_agg()
:以这种方式提出这个问题,很明显,它没有什么意义。self-join与定义组的列在同一列上操作,因此这只会生成一个相同列的列表
UserID
列中的sRelIDs
(每出现一次给定的UserID
在原始查询中)。