首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择多个具有匹配id的行

选择多个具有匹配id的行
EN

Stack Overflow用户
提问于 2018-12-10 12:28:25
回答 2查看 99关注 0票数 0

我试了几个小时,读了很多帖子,但我仍然想不出如何处理这个请求:

我有一张这样的桌子:

代码语言:javascript
运行
复制
+------+------+
|roleid|comid |
+------+------+
|11    | A    |
+------+------+
|12    | A    |
+------+------+
|11    |B     |
+------+------+
|12    |B     |
+------+------+
|13    |B     |
+------+------+

我想选择在不同的comid中发生不止一次的roleid。

我想输出的应该是:

代码语言:javascript
运行
复制
+------+------+
|roleid|comid |
+------+------+
|11    |A,B   |
+------+------+
|12    |A,B   |
+------+------+
|13    |B     |
+------+------+
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 12:32:30

简单地说,您可以将STUFF()函数与FOR XML PATH('')一起用作

代码语言:javascript
运行
复制
SELECT roleid,
       STUFF(
         (
           SELECT ',' + comid
           FROM T
           WHERE roleid = T1.roleid
           FOR XML PATH('')
         ), 1, 1, ''
       ) comid 
FROM T T1
GROUP BY roleid

演示

票数 1
EN

Stack Overflow用户

发布于 2018-12-10 12:40:05

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

代码语言:javascript
运行
复制
SELECT roleid,
       STRING_AGG(comid, ',')
FROM T
GROUP BY roleid
HAVING COUNT(DISTINCT comid) > 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53705676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档