我试了几个小时,读了很多帖子,但我仍然想不出如何处理这个请求:
我有一张这样的桌子:
+------+------+
|roleid|comid |
+------+------+
|11 | A |
+------+------+
|12 | A |
+------+------+
|11 |B |
+------+------+
|12 |B |
+------+------+
|13 |B |
+------+------+
我想选择在不同的comid中发生不止一次的roleid。
我想输出的应该是:
+------+------+
|roleid|comid |
+------+------+
|11 |A,B |
+------+------+
|12 |A,B |
+------+------+
|13 |B |
+------+------+
发布于 2018-12-10 12:32:30
简单地说,您可以将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
发布于 2018-12-10 12:40:05
如果您使用的Server版本大于或等于2017,您也可以使用STRING_AGG
函数,如果只使用具有多个不同comid
的roleid
,则必须使用HAVING
caluse:
SELECT roleid,
STRING_AGG(comid, ',')
FROM T
GROUP BY roleid
HAVING COUNT(DISTINCT comid) > 1
https://stackoverflow.com/questions/53705676
复制相似问题