类别:SQL数据库 / 日期:2026-08-11 / 浏览:1752 / 评论:0
如图,将表1数据按下面要求,生成表2
在 MySQL 中,将多行商品合并成一行并用逗号分隔,最核心的函数是 GROUP_CONCAT。这个函数专门用于将分组内的多个值连接成一个字符串。
假设你的表名为 test811,包含 单号 和 商品 两列,SQL 命令如下:
基本命令(最常用):
SELECT 单号, GROUP_CONCAT(商品 SEPARATOR ',') AS 商品 FROM test811 GROUP BY 单号 ORDER BY 单号;
如下图:
---------------------------------------
进阶用法(根据实际需求调整)
1. 如果希望对合并后的商品进行排序
比如希望商品按照字母顺序(A-Z)排列,可以在 GROUP_CONCAT 内部使用 ORDER BY:
SELECT 单号, GROUP_CONCAT(商品 ORDER BY 商品 ASC SEPARATOR ',') AS 商品 FROM test811 GROUP BY 单号;
2. 如果想去重后再合并(避免重复商品)
假如某个单号下有重复的商品(比如 11 对应 A, A, B),只想保留一个 A:
SELECT 单号, GROUP_CONCAT(DISTINCT 商品 SEPARATOR ',') AS 商品 FROM test811 GROUP BY 单号;
3. 如果合并后的字符串太长被截断了
GROUP_CONCAT 默认最大长度为 1024 个字符。如果商品较多,需要先设置更大的长度:
-- 临时设置(本次会话有效) SET SESSION group_concat_max_len = 10000; -- 然后再执行查询 SELECT 单号, GROUP_CONCAT(商品 SEPARATOR ',') AS 商品 FROM test811 GROUP BY 单号;


