Scala中如何实现相同键对应列值的合并拼接
同列分组值拼接实现方法
这个需求属于典型的分组字符串聚合场景,不同数据库的内置实现函数有差异,以下是各主流数据库可直接复用的写法,默认拼接分隔符为, :
- MySQL / SQLite
直接使用内置的GROUP_CONCAT聚合函数即可:
如果需要对拼接值去重、排序,可以调整为SELECT ColumnA, GROUP_CONCAT(ColumnB SEPARATOR ', ') AS ColumnB FROM 你的实际表名 GROUP BY ColumnA;GROUP_CONCAT(DISTINCT ColumnB ORDER BY ColumnB SEPARATOR ', ')。 - PostgreSQL / SQL Server 2017及以上版本
使用STRING_AGG聚合函数:
支持拼接时指定排序、去重,写法为SELECT ColumnA, STRING_AGG(ColumnB, ', ') AS ColumnB FROM 你的实际表名 GROUP BY ColumnA;STRING_AGG(DISTINCT ColumnB, ', ' ORDER BY ColumnB)。 - SQL Server 2016及更早版本
没有内置的字符串聚合函数,需要通过FOR XML PATH配合STUFF实现:SELECT t1.ColumnA, STUFF( (SELECT ', ' + ColumnB FROM 你的实际表名 t2 WHERE t2.ColumnA = t1.ColumnA FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '' ) AS ColumnB FROM 你的实际表名 t1 GROUP BY t1.ColumnA; - Oracle
使用LISTAGG函数实现,必须通过WITHIN GROUP指定拼接顺序:
如果拼接后字符串长度超出限制,Oracle 12cR2及以上版本可以追加SELECT ColumnA, LISTAGG(ColumnB, ', ') WITHIN GROUP (ORDER BY ColumnB) AS ColumnB FROM 你的实际表名 GROUP BY ColumnA;ON OVERFLOW TRUNCATE参数避免运行报错。
内容的提问来源于stack exchange,提问作者Galay
相关产品推荐
相关产品推荐

