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

如何合并多行列值并仅返回单行?SQL多行列拼接技术问询

解决方案

针对你需要将多表关联后的多行结果拼接成单行的需求,不同数据库有对应的字符串聚合函数可以实现,无需硬编码pivot值,以下是各主流数据库的实现方案:

MySQL/MariaDB

使用GROUP_CONCAT函数实现分组拼接:

SELECT
    Table1.ID,
    GROUP_CONCAT(CONCAT(Table2.Col, ' , ', Table3.Col) SEPARATOR ' ; ') AS combined_cols
FROM
    Table1
INNER JOIN
    Table2 ON Table1.ID = Table2.ID
INNER JOIN
    Table3 ON Table2.ID = Table3.ID
           AND Table2.Col != Table3.Col
GROUP BY
    Table1.ID;
  • SEPARATOR用于指定不同行拼接结果之间的分隔符,可根据需求替换(比如换成', ')
  • 若需去重拼接内容,可添加DISTINCT:GROUP_CONCAT(DISTINCT CONCAT(Table2.Col, ' , ', Table3.Col) SEPARATOR ' ; ')

SQL Server 2017+/Azure SQL

使用STRING_AGG函数:

SELECT
    Table1.ID,
    STRING_AGG(CONCAT(Table2.Col, ' , ', Table3.Col), ' ; ') AS combined_cols
FROM
    Table1
INNER JOIN
    Table2 ON Table1.ID = Table2.ID
INNER JOIN
    Table3 ON Table2.ID = Table3.ID
           AND Table2.Col != Table3.Col
GROUP BY
    Table1.ID;
  • STRING_AGG是SQL Server 2017及以后版本支持的原生聚合函数,语法简洁直观

Oracle 11gR2+

使用LISTAGG函数:

SELECT
    Table1.ID,
    LISTAGG(CONCAT(Table2.Col, ' , ', Table3.Col), ' ; ') WITHIN GROUP (ORDER BY Table2.Col) AS combined_cols
FROM
    Table1
INNER JOIN
    Table2 ON Table1.ID = Table2.ID
INNER JOIN
    Table3 ON Table2.ID = Table3.ID
           AND Table2.Col != Table3.Col
GROUP BY
    Table1.ID;
  • WITHIN GROUP (ORDER BY ...)用于指定拼接的顺序,保证结果的一致性

PostgreSQL

使用STRING_AGG函数:

SELECT
    Table1.ID,
    STRING_AGG(CONCAT(Table2.Col, ' , ', Table3.Col), ' ; ') AS combined_cols
FROM
    Table1
INNER JOIN
    Table2 ON Table1.ID = Table2.ID
INNER JOIN
    Table3 ON Table2.ID = Table3.ID
           AND Table2.Col != Table3.Col
GROUP BY
    Table1.ID;
  • 支持通过ORDER BY指定拼接顺序:STRING_AGG(..., ' ; ') ORDER BY Table2.Col

注意事项

  • 部分数据库对聚合后的字符串长度有默认限制(比如MySQL的GROUP_CONCAT默认最大长度为1024),若需要拼接更长内容,需调整对应配置参数
  • 可根据实际需求修改CONCAT里的分隔符(比如把' , '换成其他符号)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:57:13