You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多行合并问题:如何将同OrderID的多行记录合并为一行

解决方法:合并相同OrderID的多行记录

别担心,这个需求其实非常常见,用SQL的分组+字符串聚合函数就能轻松搞定,我给你一步步讲清楚~

核心思路

我们需要把同一个OrderID对应的所有产品合并成一个列表,只保留唯一的OrderID。这里不用自连接(自连接更适合关联不同行的关联数据),而是用GROUP BY分组,搭配字符串聚合函数来拼接产品名称。

不同数据库的具体写法

因为不同数据库的字符串聚合函数略有不同,我给你列几种常用的:

1. SQL Server / PostgreSQL

用STRING_AGG函数来拼接字符串:

SELECT 
  OrderID,
  STRING_AGG(Product, ', ') AS Products  -- 这里的', '是产品之间的分隔符,可按需修改(比如换成'; ')
FROM 
  YourTableName  -- 替换成你实际的表名
GROUP BY 
  OrderID;

2. MySQL / MariaDB

用GROUP_CONCAT函数:

SELECT 
  OrderID,
  GROUP_CONCAT(Product SEPARATOR ', ') AS Products
FROM 
  YourTableName
GROUP BY 
  OrderID;

扩展:如果还有其他同OrderID下一致的字段

如果你的表还有订单日期、客户ID这类同一个OrderID下完全相同的字段,可以一起放到查询里:

-- 以SQL Server为例,其他数据库替换对应的聚合函数即可
SELECT 
  OrderID,
  CustomerID,
  OrderDate,
  STRING_AGG(Product, ', ') AS Products
FROM 
  YourTableName
GROUP BY 
  OrderID, CustomerID, OrderDate;

小提示

  • 记得把代码里的YourTableName替换成你自己的表名,Product替换成实际存储产品名称的字段名
  • 分隔符可以自定义,比如想让产品换行显示,SQL Server里可以用STRING_AGG(Product, CHAR(10)),MySQL里用GROUP_CONCAT(Product SEPARATOR '\n')

内容的提问来源于stack exchange,提问作者user7146708

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:58:10