类别:SQL数据库 / 日期:2026-08-11 / 浏览:1752 / 评论:0

如图,将表1数据按下面要求,生成表2

image.png

在 MySQL 中,将多行商品合并成一行并用逗号分隔,最核心的函数是 GROUP_CONCAT。这个函数专门用于将分组内的多个值连接成一个字符串。

假设你的表名为 test811,包含 单号 和 商品 两列,SQL 命令如下:

基本命令(最常用):

SELECT 
    单号, 
    GROUP_CONCAT(商品 SEPARATOR ',') AS 商品
FROM 
    test811
GROUP BY 
    单号
ORDER BY 
    单号;

如下图:

image.png

---------------------------------------

进阶用法(根据实际需求调整)

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 
    单号;

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章