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

SQL查询相同ID多条记录并合并同客户订单号为逗号分隔值

同客户多订单号合并查询方案

需求说明

原始数据表结构如下:

CustID  CustName     OrderNumber ...
001     John Smith   1234
002     kelly smith  1235
002     kelly smith  4512

期望实现效果:同一个客户存在多条订单记录时,将对应的订单号合并为逗号分隔的字符串返回,结果如下:

CustID  CustName     OrderNumber ...
001     John Smith   1234
002     kelly smith  1235, 4512

各数据库实现语句

请根据你使用的数据库类型选择对应查询语句,注意替换语句中的你的表名为实际表名。

  • MySQL
SELECT 
  CustID,
  CustName,
  GROUP_CONCAT(DISTINCT OrderNumber ORDER BY OrderNumber SEPARATOR ', ') AS OrderNumber
FROM 你的表名
GROUP BY CustID, CustName;

提示:MySQL默认GROUP_CONCAT返回长度有限制,如果订单数量较多,可提前修改group_concat_max_len参数调整长度上限。

  • PostgreSQL
SELECT 
  CustID,
  CustName,
  STRING_AGG(DISTINCT OrderNumber::TEXT, ', ' ORDER BY OrderNumber) AS OrderNumber
FROM 你的表名
GROUP BY CustID, CustName;
  • SQL Server
    2017及以上版本:
SELECT 
  CustID,
  CustName,
  STRING_AGG(OrderNumber, ', ') WITHIN GROUP (ORDER BY OrderNumber) AS OrderNumber
FROM 你的表名
GROUP BY CustID, CustName;

2016及更低版本:

SELECT 
  t1.CustID,
  t1.CustName,
  STUFF((
    SELECT ', ' + CAST(t2.OrderNumber AS VARCHAR(10))
    FROM 你的表名 t2
    WHERE t2.CustID = t1.CustID AND t2.CustName = t1.CustName
    ORDER BY t2.OrderNumber
    FOR XML PATH(''), TYPE
  ).value('.', 'VARCHAR(MAX)'), 1, 2, '') AS OrderNumber
FROM 你的表名 t1
GROUP BY t1.CustID, t1.CustName;
  • Oracle
    11gR2及以上版本:
SELECT 
  CustID,
  CustName,
  LISTAGG(OrderNumber, ', ') WITHIN GROUP (ORDER BY OrderNumber) AS OrderNumber
FROM 你的表名
GROUP BY CustID, CustName;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:36:05