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

SQL Server合并两表列值到新表并按ID分组排序的问题

解决同一ID记录连续排列的SQL调整方案

嘿,我懂你的需求啦!现在直接用UNION ALL合并插入的话,数据库不会自动帮你按ID分组排列,所以同一ID的记录会被打乱。要实现同一ID的记录连续排列,咱们只需要在合并数据的时候加上排序逻辑就行,下面给你两种可行的方案:

基础方案:按ID排序插入

直接在合并后的数据集上按ID排序,再插入到Table3中:

INSERT INTO Table3 (ID, Name, EarningOrDeduction)
SELECT ID, Name, EarningOrDeduction
FROM (
    -- 先把两个表的数据统一字段名合并
    SELECT ID, Name, Earning AS EarningOrDeduction
    FROM Table1
    UNION ALL
    SELECT ID, Name, Deduction AS EarningOrDeduction
    FROM Table2
) AS CombinedData
ORDER BY ID;

这个方案会让所有相同ID的记录连续排列,不管是来自Table1还是Table2的。

进阶方案:按ID+类型排序

如果还想让同一ID下,先显示所有薪资项(Earning)再显示扣除项(Deduction),或者反过来,可以新增一个排序标记字段:

INSERT INTO Table3 (ID, Name, EarningOrDeduction)
SELECT ID, Name, EarningOrDeduction
FROM (
    SELECT ID, Name, Earning AS EarningOrDeduction, 1 AS SortPriority
    FROM Table1 -- 标记薪资项为高优先级,先显示
    UNION ALL
    SELECT ID, Name, Deduction AS EarningOrDeduction, 2 AS SortPriority
    FROM Table2 -- 扣除项后显示
) AS CombinedData
ORDER BY ID, SortPriority;

要是想让扣除项先显示,只需要把Table1的SortPriority改成2,Table2的改成1就行。

兼容性说明

有些数据库(比如MySQL)支持直接在UNION ALL后面加ORDER BY,不需要子查询,写法更简洁:

INSERT INTO Table3 (ID, Name, EarningOrDeduction)
SELECT ID, Name, Earning FROM Table1
UNION ALL
SELECT ID, Name, Deduction FROM Table2
ORDER BY ID;

不过用子查询的写法兼容性更强,几乎所有主流数据库都支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:54:11