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

如何将多行数据合并为单行?同ID字段值合并技术问询

如何将crosstab生成的单值多行表格合并为ID唯一的单行表格?

原始表格(crosstab输出)

IDc1c2c3
11
14
112
152
153

目标表格

IDc1c2c3
14112
1523

最优实现方案

方案1:用聚合函数MAX()/MIN()结合GROUP BY

你担心的“不必要计算”其实不存在——因为每个ID对应的每个列最多只有一个非空值,MAX()或MIN()会直接忽略空值,取到唯一的非空值,计算成本极低,数据库引擎会做针对性优化,执行效率很高。

具体SQL代码:

SELECT
  ID,
  MAX(c1) AS c1,
  MAX(c2) AS c2,
  MAX(c3) AS c3
FROM your_crosstab_result_table
GROUP BY ID;

方案2:优化原始crosstab查询(一步到位)

如果你的crosstab是基于未聚合的源数据生成的,那可以直接在crosstab的源查询中完成聚合,避免后续再处理。

假设原始crosstab查询是这样的:

SELECT * FROM crosstab(
  'SELECT ID, category, value FROM your_source_data',
  'SELECT DISTINCT category FROM your_source_data ORDER BY 1'
) AS ct(ID INT, c1 INT, c2 INT, c3 INT);

修改为带聚合的源查询,直接生成ID唯一的结果:

SELECT * FROM crosstab(
  'SELECT ID, category, MAX(value) 
   FROM your_source_data 
   GROUP BY ID, category 
   ORDER BY 1, 2',
  'SELECT DISTINCT category FROM your_source_data ORDER BY 1'
) AS ct(ID INT, c1 INT, c2 INT, c3 INT);

这个方案从源头解决问题,减少了中间数据量,是更高效的做法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:52:39