如何编写SQL SELECT语句实现同ID多type的字符串拼接?
按ID拼接多行TYPE字段的SQL实现方法
不同数据库的字符串拼接函数有所不同,以下是主流数据库的实现方式:
MySQL/MariaDB
使用GROUP_CONCAT函数,分组后直接拼接字段:
SELECT id, GROUP_CONCAT(type SEPARATOR ',') AS types FROM your_table_name GROUP BY id;
如果需要指定拼接顺序,可以加上ORDER BY:
GROUP_CONCAT(type ORDER BY type SEPARATOR ',')
PostgreSQL
使用STRING_AGG函数实现拼接:
SELECT id, STRING_AGG(type, ',') AS types FROM your_table_name GROUP BY id;
同样支持排序和去重(如果有重复值需要处理):
STRING_AGG(DISTINCT type, ',' ORDER BY type)
SQL Server
2017及以上版本
直接使用STRING_AGG函数:
SELECT id, STRING_AGG(type, ',') AS types FROM your_table_name GROUP BY id;
2016及更早版本
需要借助FOR XML PATH和STUFF来实现:
SELECT t.id, STUFF((SELECT ',' + type FROM your_table_name WHERE id = t.id FOR XML PATH('')), 1, 1, '') AS types FROM your_table_name t GROUP BY t.id;
STUFF的作用是移除拼接结果开头多余的逗号。
Oracle
使用LISTAGG函数,支持指定排序顺序:
SELECT id, LISTAGG(type, ',') WITHIN GROUP (ORDER BY type) AS types FROM your_table_name GROUP BY id;
内容的提问来源于stack exchange,提问作者Radu
相关产品推荐
相关产品推荐

