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

如何合并同一表中ColumnA值相同的行?附代码尝试及数据示例

合并同一ColumnA值的行并整合非空字段

现有名为tbl的数据库表,需合并其中ColumnA值相同的行,将各行非空字段数据整合到同一行中。尝试了以下UPDATE代码但未达到预期效果,求正确实现方法:

-- 用户原代码
UPDATE a.ColumnA
FROM tbl a
INNER JOIN tbl b ON a.ColumnA = b.ColumnA
WHERE a.tbl = b.tbl

合并前的数据表

ColumnIDColumnAColumnBColumnC
11data1
21data2
32data3
42data4

期望合并后的数据表

ColumnIDColumnAColumnBColumnC
n1data2data1
n2data4data3

正确实现方法

方法1:生成新的合并结果表(推荐,避免修改原表)

利用聚合函数MAX(或MIN)提取每组ColumnA下的非空值(NULL会被聚合函数忽略),同时可指定新的ID或保留原组内的最小/最大ID:

SELECT
    MIN(ColumnID) AS ColumnID, -- 保留每组最小ID,也可用NEWID()生成新ID
    ColumnA,
    MAX(ColumnB) AS ColumnB,
    MAX(ColumnC) AS ColumnC
FROM tbl
GROUP BY ColumnA;

方法2:更新原表并删除重复行

如果需要直接修改原表,分两步操作:

  1. 填充非空字段:将同一ColumnA组内的非空值合并到保留行中(这里选择每组ID最小的行作为保留行)
UPDATE a
SET
    ColumnB = COALESCE(a.ColumnB, b.ColumnB),
    ColumnC = COALESCE(a.ColumnC, b.ColumnC)
FROM tbl a
JOIN tbl b ON a.ColumnA = b.ColumnA AND a.ColumnID < b.ColumnID;
  1. 删除重复行:移除每组中除保留行外的其他行
DELETE FROM tbl
WHERE ColumnID NOT IN (
    SELECT MIN(ColumnID)
    FROM tbl
    GROUP BY ColumnA
);

原代码问题说明

  • 语法错误:UPDATE a.ColumnA写法错误,UPDATE语句应指定要更新的表,而非单个字段
  • 无效条件:WHERE a.tbl = b.tbl无实际意义,因为操作的是同一个表,无需此判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:45:58