sql如何将值放在一行上

zu0ti5jz  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(450)

有必要在第二栏中的一行中列出所有相关账目。
这显示一个错误
将varchar值“”转换为数据类型int时,转换失败。

SELECT [UserID],
STUFF((SELECT ', ' + UserID
FROM #RelatedIDs
WHERE (UserID = t.UserID)
FOR XML PATH('')) ,1,1,'') AS RelIDs
FROM #RelatedIDs t
GROUP BY UserID
vuv7lop3

vuv7lop31#

使用 CONCAT() 而不是 + :

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;

注意,我还更改了参数的内容 1, 11, 2 . 那是因为逗号后面有空格。
你的关联从句还表明,当你让它起作用时,结果不会很有趣。

ffvjumwh

ffvjumwh2#

你可以的 cast varchar的整数值:

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

如果您运行的是最新版本的sql server(2017或更高版本),那么您可以使用 string_agg() :

SELECT t.UserID, STRING_AGG(r.UserID, ',') RelIDs
FROM #RelatedIDs t
INNER JOIN #RelatedIDs r on r.UserID = t.UserID
GROUP BY t.UserID

以这种方式提出这个问题,很明显,它没有什么意义。self-join与定义组的列在同一列上操作,因此这只会生成一个相同列的列表 UserID 列中的s RelIDs (每出现一次给定的 UserID 在原始查询中)。

相关问题