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

SQL多行转单行:如何将客户产品表转换为按客户聚合的表

解决方案:按客户聚合产品为逗号分隔字符串

这个需求核心是分组字符串聚合,不同SQL数据库的实现语法略有差异,下面是主流数据库的具体可行写法:

MySQL/MariaDB

用GROUP_CONCAT()函数,这是MySQL系专门用来做分组字符串拼接的工具:

SELECT 
  customer,
  GROUP_CONCAT(product SEPARATOR ', ') AS all_products
FROM 
  your_table_name
GROUP BY 
  customer;

说明:SEPARATOR ', '用来指定分隔符,默认是逗号,显式写出更清晰;如果需要去重产品,可以加DISTINCT参数,比如GROUP_CONCAT(DISTINCT product ...)

PostgreSQL

使用STRING_AGG()函数,这是PostgreSQL的标准字符串聚合函数:

SELECT 
  customer,
  STRING_AGG(product, ', ') AS all_products
FROM 
  your_table_name
GROUP BY 
  customer;

如果需要按产品排序后再拼接,可以追加排序规则,比如STRING_AGG(product, ', ') ORDER BY product

SQL Server(2017及以上版本)

同样支持STRING_AGG(),语法和PostgreSQL相近:

SELECT 
  customer,
  STRING_AGG(product, ', ') AS all_products
FROM 
  your_table_name
GROUP BY 
  customer;

针对SQL Server 2016及更早版本,可以用STUFF结合FOR XML PATH的兼容写法:

SELECT 
  customer,
  STUFF(
    (SELECT ', ' + product 
     FROM your_table_name t2 
     WHERE t2.customer = t1.customer 
     FOR XML PATH('')),
    1, 2, ''
  ) AS all_products
FROM 
  your_table_name t1
GROUP BY 
  customer;

Oracle

使用LISTAGG()函数,这是Oracle官方提供的字符串聚合方案:

SELECT 
  customer,
  LISTAGG(product, ', ') WITHIN GROUP (ORDER BY product) AS all_products
FROM 
  your_table_name
GROUP BY 
  customer;

WITHIN GROUP (ORDER BY product)用来指定拼接顺序,可选但推荐加上,让结果更可控


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:09:01