我尝试了几个小时,读了很多帖子,但仍然不知道如何处理此请求:
我有一张这样的桌子:
+------+------+
|roleid|comid |
+------+------+
|11 | A |
+------+------+
|12 | A |
+------+------+
|11 |B |
+------+------+
|12 |B |
+------+------+
|13 |B |
+------+------+
我想选择使用不同comid多次出现的角色ID。
我想输出的内容应该是这样的:
+------+------+
|roleid|comid |
+------+------+
|11 |A,B |
+------+------+
|12 |A,B |
+------+------+
|13 |B |
+------+------+
答案 0 :(得分:1)
只需将STUFF()
和FOR XML PATH('')
函数一起使用
SELECT roleid,
STUFF(
(
SELECT ',' + comid
FROM T
WHERE roleid = T1.roleid
FOR XML PATH('')
), 1, 1, ''
) comid
FROM T T1
GROUP BY roleid
答案 1 :(得分:1)
如果您使用的SQL Server版本大于或等于2017,则还可以使用STRING_AGG
函数,并仅采用具有多个不同roleid
的那些comid
使用HAVING
日历:
SELECT roleid,
STRING_AGG(comid, ',')
FROM T
GROUP BY roleid
HAVING COUNT(DISTINCT comid) > 1