sql如何将值放在一行上

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

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

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

vuv7lop31#

使用 CONCAT() 而不是 + :

  1. SELECT [UserID],
  2. STUFF((SELECT CONCAT(', ', UserID)
  3. FROM #RelatedIDs ri
  4. WHERE ri.UserID = t.UserID
  5. FOR XML PATH('')
  6. ), 1, 2, '') AS RelIDs
  7. FROM #RelatedIDs t
  8. GROUP BY UserID;

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

ffvjumwh

ffvjumwh2#

你可以的 cast varchar的整数值:

  1. SELECT [UserID],
  2. STUFF((SELECT ',' + CAST(UserID as VARCHAR(100))
  3. FROM #RelatedIDs
  4. WHERE (UserID = t.UserID)
  5. FOR XML PATH('')) ,1,1,'') AS RelIDs
  6. FROM #RelatedIDs t
  7. GROUP BY UserID

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

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

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

展开查看全部

相关问题