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

MySQL数据库行转列:将多行数据合并为单行多列的查询实现

嗨,这个需求属于MySQL里常见的**行转列(Pivot)**场景,刚好你的cp值是固定的1、2、3,用条件聚合就能轻松解决。

直接上可行的查询语句,你只需要把your_table_name替换成你的实际表名就行:

SELECT 
    id,
    name,
    MAX(CASE WHEN cp = 1 THEN time END) AS cp1,
    MAX(CASE WHEN cp = 2 THEN time END) AS cp2,
    MAX(CASE WHEN cp = 3 THEN time END) AS cp3
FROM 
    your_table_name
GROUP BY 
    id, name;

我来拆解下这段代码的逻辑:

  • GROUP BY id, name 是核心,它保证每个(id,name)组合最终只输出一行数据,刚好匹配你要的目标结构。
  • CASE WHEN cp = n THEN time END 会把对应cp值的time筛选出来,其他不匹配的情况会返回NULL。
  • 外层的MAX()函数主要是用来排除NULL值,同时如果同一个(id,name,cp)存在多条记录(比如你数据里id=2、name=xyx的cp=2有两个time值),MAX()会取其中最大的那个。如果你想取最小的,把MAX()换成MIN()就行;要是想把所有对应值拼起来,用GROUP_CONCAT(CASE ... SEPARATOR ',')就可以实现。

如果未来你的cp值可能新增或者不固定,静态写死列名的方式就不太灵活了,这时候可以用动态SQL自动生成列,但就你当前的需求来说,上面的静态写法是最直接高效的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:47:31