合并结构相同但数据不同的多表:重复ID的Totals字段合并处理需求
合并结构相同但数据不同的多表:重复ID的Totals字段合并处理需求
问题背景
你有4个结构完全一致的表,字段都是 ID, Name, Totals,每个表对应不同的统计周期(比如示例里的Year1、Year2)。部分ID会在不同表中重复出现(对应的Name一致,但Totals值不同),现在需要将这些表合并为一个查询结果,对重复ID的Totals字段进行合并处理。
你的示例数据如下:
Year1 表
| ID | Name | Totals |
|---|---|---|
| 1 | Bob | 15 |
| 2 | John | 2 |
| 3 | Smith | 4 |
| 4 | Carl | 4 |
Year2 表
| ID | Name | Totals |
|---|---|---|
| 1 | Bob | 10 |
| 3 | Smith | 2 |
| 4 | Carl | 1 |
| 5 | Greg | 10 |
解决方案
根据你对“合并Totals字段”的不同需求,这里提供两种常用的处理方式:
方式1:汇总相同ID的所有Totals总和
如果你的目标是把同一个ID在所有表中的Totals值相加,得到每个ID的总合计,可以用 UNION ALL 先合并所有表的数据,再通过 GROUP BY 分组求和:
SELECT ID, Name, SUM(Totals) AS Total_Sum FROM ( -- 依次合并4个表的数据,替换Year3、Year4为你实际的表名 SELECT ID, Name, Totals FROM Year1 UNION ALL SELECT ID, Name, Totals FROM Year2 UNION ALL SELECT ID, Name, Totals FROM Year3 UNION ALL SELECT ID, Name, Totals FROM Year4 ) AS CombinedAllTables GROUP BY ID, Name -- 按ID和Name分组,确保同ID同Name的记录合并 ORDER BY ID;
用你的示例数据测试的话,Bob(ID=1)的Total_Sum会是 15+10=25,Smith(ID=3)的Total_Sum是 4+2=6,完美实现重复ID的Totals汇总。
方式2:保留各周期的Totals,横向合并记录
如果你需要对比每个ID在不同周期的Totals值,希望把同一个ID的各周期数据放在同一行展示,可以用 FULL JOIN 关联所有表:
SELECT -- 取非空的ID作为唯一标识 COALESCE(y1.ID, y2.ID, y3.ID, y4.ID) AS ID, -- 确保Name显示一致,取非空值即可 COALESCE(y1.Name, y2.Name, y3.Name, y4.Name) AS Name, y1.Totals AS Year1_Totals, y2.Totals AS Year2_Totals, y3.Totals AS Year3_Totals, y4.Totals AS Year4_Totals FROM Year1 y1 -- 全连接每个表,确保所有ID都被包含 FULL JOIN Year2 y2 ON y1.ID = y2.ID FULL JOIN Year3 y3 ON COALESCE(y1.ID, y2.ID) = y3.ID FULL JOIN Year4 y4 ON COALESCE(y1.ID, y2.ID, y3.ID) = y4.ID ORDER BY ID;
用示例数据的话,查询结果会是这样:
| ID | Name | Year1_Totals | Year2_Totals | Year3_Totals | Year4_Totals |
|---|---|---|---|---|---|
| 1 | Bob | 15 | 10 | NULL | NULL |
| 2 | John | 2 | NULL | NULL | NULL |
| 3 | Smith | 4 | 2 | NULL | NULL |
| 4 | Carl | 4 | 1 | NULL | NULL |
| 5 | Greg | NULL | 10 | NULL | NULL |
这种方式能清晰看到每个ID在不同年份的Totals变化,没有数据的周期会显示 NULL。
小提示
如果你的数据中存在ID相同但Name不同的异常情况(虽然示例里ID和Name是绑定的),可以在分组时用 MAX(Name) 来统一Name值,或者先检查数据一致性哦。
备注:内容来源于stack exchange,提问作者Adam TelestoTBK Conde
相关产品推荐
相关产品推荐

