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

SQL如何将同ID对应的多行列数据合并为单行多列输出

解决方法:SQL行转列实现

你需要实现的操作属于行转列(宽表转换),根据你给出的示例,以下是不同场景下的可直接运行的实现方案:

示例原始表数据参考:

IDSequenceName
11Blue
12Green
13Red

方法1:通用CASE WHEN聚合方案(兼容所有主流SQL数据库)

该方法无需依赖数据库专属语法,MySQL、PostgreSQL、SQL Server、Oracle均可使用,适合Sequence取值固定、可枚举的场景:

SELECT
  ID,
  MAX(CASE WHEN Sequence = 1 THEN Name END) AS Seq1_Name,
  MAX(CASE WHEN Sequence = 2 THEN Name END) AS Seq2_Name,
  MAX(CASE WHEN Sequence = 3 THEN Name END) AS Seq3_Name
FROM 你的表名
GROUP BY ID;

逻辑说明:通过CASE WHEN将对应Sequence的Name匹配到指定列,再用聚合函数合并多行数据为单行,因为同ID下每个Sequence仅对应一条记录,使用MAX/MIN都不会影响最终取值。

方法2:数据库专属行转列语法(Sequence取值固定场景)

部分数据库提供了专门的行转列语法,写法更简洁,以SQL Server/Oracle的PIVOT语法为例:

SELECT ID, [1] AS Seq1_Name, [2] AS Seq2_Name, [3] AS Seq3_Name
FROM 你的表名
PIVOT (
  MAX(Name)
  FOR Sequence IN ([1], [2], [3])
) AS PivotResult;

方法3:动态行转列(Sequence取值不固定/数量不确定场景)

如果Sequence的取值不固定、无法提前枚举,可使用对应数据库的动态SQL拼接功能生成查询语句执行:

  • MySQL可通过GROUP_CONCAT拼接动态SQL后执行
  • PostgreSQL可配合tablefunc扩展的crosstab函数实现
  • SQL Server/Oracle可通过存储过程拼接动态PIVOT语句执行

最终返回效果

以上述示例数据运行后,输出结果如下:

IDSeq1_NameSeq2_NameSeq3_Name
1BlueGreenRed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03