如何在SQL中将数据表列值转换为CSV格式?
在SQL中将列值转换为CSV格式
根据不同SQL数据库类型,以下是实现列值转CSV的常用方法:
MySQL/MariaDB
使用GROUP_CONCAT()函数聚合列值:
SELECT ID, GROUP_CONCAT(Name SEPARATOR ',') AS Name_CSV FROM your_table GROUP BY ID;
需要去除重复值时,可添加DISTINCT:
SELECT ID, GROUP_CONCAT(DISTINCT Name SEPARATOR ',') AS Name_CSV FROM your_table GROUP BY ID;
PostgreSQL
使用STRING_AGG()函数,支持排序:
SELECT ID, STRING_AGG(Name, ',' ORDER BY Name) AS Name_CSV FROM your_table GROUP BY ID;
去重写法:
SELECT ID, STRING_AGG(DISTINCT Name, ',' ORDER BY Name) AS Name_CSV FROM your_table GROUP BY ID;
SQL Server
2017及以上版本直接用STRING_AGG():
SELECT ID, STRING_AGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS Name_CSV FROM your_table GROUP BY ID;
旧版本可通过FOR XML PATH实现:
SELECT DISTINCT ID, STUFF(( SELECT ',' + Name FROM your_table t2 WHERE t2.ID = t1.ID ORDER BY Name FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Name_CSV FROM your_table t1;
Oracle
使用LISTAGG()函数:
SELECT ID, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS Name_CSV FROM your_table GROUP BY ID;
去重需结合子查询:
SELECT ID, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS Name_CSV FROM (SELECT DISTINCT ID, Name FROM your_table) GROUP BY ID;
内容的提问来源于stack exchange,提问作者Raunak
相关产品推荐
相关产品推荐

