选择具有匹配id的多个行

我试了几个小时并阅读了很多帖子,但我仍然无法弄清楚如何处理这个请求:

我有这样一张table:

+------+------+
|roleid|comid |
+------+------+
|11    | A    |
+------+------+
|12    | A    |
+------+------+
|11    |B     |
+------+------+
|12    |B     |
+------+------+
|13    |B     |
+------+------+

我想选择使用不同的comid多次出现的roleid .

我想输出应该是这样的:

+------+------+
|roleid|comid |
+------+------+
|11    |A,B   |
+------+------+
|12    |A,B   |
+------+------+
|13    |B     |
+------+------+

回答(2)

2 years ago

如果您使用的SQL Server版本大于或等于2017,则还可以使用 STRING_AGG 函数并仅使用具有多个不同 comidroleid ,您必须使用 HAVING caluse:

SELECT roleid,
       STRING_AGG(comid, ',')
FROM T
GROUP BY roleid
HAVING COUNT(DISTINCT comid) > 1

2 years ago

简单地说,你可以使用带有 FOR XML PATH('')STUFF() 函数

SELECT roleid,
       STUFF(
         (
           SELECT ',' + comid
           FROM T
           WHERE roleid = T1.roleid
           FOR XML PATH('')
         ), 1, 1, ''
       ) comid 
FROM T T1
GROUP BY roleid

Demo