SQL将多行合并为一列,并从ID获取名称

时间:2018-06-04 11:23:11

标签: sql sql-server string-concatenation

考虑一个包含两个ID的数据库表connectouser

 connectouser
compID    coopID
   1         1
   1         2
   1         3
   2         1
   2         2

考虑另一个包含两个ID的数据库表coop

coop
ID   Name
1     ABC
2     DEF
3     GHJ

我想要以下输出:

Result
compID   coopname
1        ABC,DEF,GHJ
2        ABC,DEF

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

这个问题被标记为MySQL这个答案。

这是一个分组和group_concat()

select cu.compId, group_concat(co.name order by co.id) as coopnames
from connectouser cu join
     coop co
     on cu.coopID = co.ID
group by cu.compId;

在SQL Server中,您可以执行以下操作:

select cu.compId,
       stuff( (select ',' + co.name
               from coop co
               where cu.coopID = co.ID
               order by co.id
               for xml path ('')
              ), 1, 1, ''
            ) as names
from connectouser cu;

最新版本的SQL Server支持string_agg(),这是一种更好的方法。