SQL合并多行文本方案_SQL将多行转单行示例

admin 百科 16
SQL中多行转单行需用聚合函数拼接字符串:MySQL用GROUP_CONCAT(),PostgreSQL用STRING_AGG(),SQL Server 2017+用STRING_AGG()、旧版用FOR XML PATH,Oracle用LISTAGG();均需先分组再聚合,并注意分隔符、排序、去重及溢出处理。

SQL合并多行文本方案_SQL将多行转单行示例-第1张图片-佛山资讯网

SQL中将多行文本合并为单行,核心是使用聚合函数配合字符串连接功能。不同数据库语法略有差异,但思路一致:分组后把同一组的多行值拼成一个字符串。

MySQL:用GROUP_CONCAT()最直接

MySQL原生支持GROUP_CONCAT(),可指定分隔符、去重、排序和长度限制。

  • 基础用法:SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users WHERE dept = 'tech';
  • 带排序和去重:GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR ' | ')
  • 注意默认最大长度为1024,超长会被截断;可通过SET SESSION group_concat_max_len = 10000;临时调整

PostgreSQL:STRING_AGG()是标准方案

PostgreSQL推荐用STRING_AGG(expression, delimiter),功能全面且符合SQL标准。

  • 简单拼接:SELECT STRING_AGG(name, ', ') FROM employees WHERE team = 'backend';
  • 支持排序:STRING_AGG(name, ' → ' ORDER BY hire_date)
  • 可嵌套COALESCE处理NULL:STRING_AGG(COALESCE(name, 'unknown'), ', ')

SQL Server:STRING_AGG()(2017+)或FOR XML(旧版)

SQL Server 2017起支持STRING_AGG(),写法类似PostgreSQL;2016及更早版本常用FOR XML PATH技巧。

标签: mysql oracle go session 聚合函数 overflow

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~