选择具有匹配id的多个行

loading...


0

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

我有这样一张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     |
+------+------+

loading...

2回答

  • 1

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

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

  • 1

    简单地说,你可以使用带有 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

评论

暂时没有评论!