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

如何用SQL将data A列的行值合并为统一的data B列?

SQL查询修改求助

现有SQL表tbl_test,data A列包含apple、banana、cat等值,我想通过SQL查询生成data B列,让每行的data B都是data A列所有行值的合并字符串(格式示例:apple, banana, cat)。

期望输出

data Adata B
appleapple, banana, cat
bananaapple, banana, cat
catapple, banana, cat

当前写的查询语句

SELECT 
  data A,
  '' as data B
From tbl_test;

请问该怎么修改这个查询语句才能实现需求?我SQL基础比较弱,麻烦指导下。


解决方案

不同数据库的字符串聚合函数不一样,下面是几种常用数据库的实现方式:

MySQL/MariaDB

用GROUP_CONCAT()函数,通过子查询获取所有data A的合并值:

SELECT 
  `data A`,
  (SELECT GROUP_CONCAT(`data A` SEPARATOR ', ') FROM tbl_test) AS `data B`
FROM tbl_test;
  • 注意:列名带空格时,必须用反引号`把列名包起来
  • SEPARATOR ', '是指定合并时用逗号加空格分隔,和你要的格式一致

PostgreSQL

用STRING_AGG()函数:

SELECT 
  "data A",
  (SELECT STRING_AGG("data A", ', ') FROM tbl_test) AS "data B"
FROM tbl_test;
  • 列名带空格时用双引号"包裹(要注意数据库的标识符大小写规则)

SQL Server(2017及以上版本)

用STRING_AGG()函数,还可以指定排序:

SELECT 
  [data A],
  (SELECT STRING_AGG([data A], ', ') WITHIN GROUP (ORDER BY [data A])) AS [data B]
FROM tbl_test;
  • 列名带空格时用方括号[]包裹
  • WITHIN GROUP (ORDER BY [data A])可以让合并的字符串按data A排序,不想排序的话可以删掉这部分

Oracle

用LISTAGG()函数:

SELECT 
  "data A",
  (SELECT LISTAGG("data A", ', ') WITHIN GROUP (ORDER BY "data A") FROM tbl_test) AS "data B"
FROM tbl_test;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:42:45