开发者

SQL Server临时表合并与数量汇总的实现方法

目录
  • 引言
  • 1. 场景举例
  • 2. 方法一:UNION ALL + GROUP BY(推荐)
    • 特点
  • 3. 方法二:FULL OUTER JOIN
    • 特点
  • 4. 方法三:合并多个临时表(通用模板)
    • 5. 性能对比与优化建议
      • 6. 总结

        引言

        在实际开发中,我们经常会遇到这样的需求:

        不同业务逻辑在中间处理过程中,会产生多个结构类似的临时表(Temporary Table),例如两个统计结果表,字段结构相同,但数据来源不同。如果希望将这些结果进行合并,并且按相同 id 进行数量汇总,SQL Server 提供了多种实现方式。本文将系统介绍几种常见做法,并给出适用场php景。

        1. 场景举例

        假设我们有两个临时表,分别存储来自不同渠道的订单统计:

        CREATE TABLE #tmp1 (id INT, num INT);
        CREATE TABLE #tmp2 (id INT, num INT);
         
        INSERT INTO #tmp1 VALUES (1, 10), (2, 20), (3, 30);
        INSERT INTO #tmp2 VALUES (2, 5), (3js, 15), (4, 25);

        需求:

        • 将两个临时表合并;
        • 相同 idnum 相加;
        • 保留所有 id

        2. 方法一:UNION ALL + GROUP BY(推荐)

        这是最简洁、性能较优的方式,尤其适用于需要合并多个相同结构表的情况。

        SELECT id, SUM(num) AS total_num
        FROM (
            SELECT id, num FROM #tmp1
            UNION ALL
            SELECT id, num FROM #tmp2
        ) t
        GROUP BY id;

        结果:

        id | total_num
        1  | 10
        2  | 25
        3  | 45
        4  | 25

        特点

        • 简洁、易读;
        • 可扩展性强:如果有多个临时表,只需继续 UNION ALL
        • 适用场景:表结构完全一致。

        3. 方法二:FULL OUTER JOIN

        如果你需要清晰地看到来自不同表的数据来源,或者两个表字段不完全一致,可以使用 FULL OUTER JOIN

        SELECT 
            COALESCE(t1.id, t2.id) AS id,
            ISNULL(t1.num, 0) + ISNULL(t2.num, 0) AS total_num
        FROM #tmp1 t1
        FULL OUTER JOIN #tmp2 t2
            ON t1.id = t2.id;

        结果与方法一相同:

        id | total_num
        1  | 10
        2  | 25
        3  | 45
        4  | 25

        特点

        • 可以保留两个表的来源数据;
        • 写法比 UNION ALL 冗长;
        • 适用场景:当需要对不同表进行逐字段对齐处理时更合适。

        4. 方法三:合并多个临时表(通用模板)

        在实际项目中,我们可能会有三个以上的临时表,例如 #tmp1#tmp2#tmp3

        此时推荐使用 UNION ALL + GROUP BY

        SELECT id, SUM(nu编程客栈m) AS total_num
        FROM (
            SELECT id, num FROM #tmp1
            UNION ALL
            SELECT id, num FROM #tmp2
            UNION ALL
            SELECT id, num FROM #tmp3
        ) t
        GROUP BY id;

        这种方式可以轻松扩展到 N 个临时表。

        5. 性能对比与优化建议

        UNION ALL + GROUP BY

        • 更适合大数据量合并,SQL Server 优化器对这种模式有较好支持。
        • 如果合并的表数量多,可以考虑将其放入临时表再做聚合。

        FULL OUTER JOIN

        • 更直观,但如果表数量超过 2 个,写法复杂度会急剧上升。
        • 性能上通常比 UNION ALL 差。

        建议:如果只是简单数量合并,尽量使用 UNION ALL + GROUP BY

        如果需要保留不同来源表的明细差异,可以使用 FULL OUTER JOIN

        6. 总结

        在 SQL Server 中php合并两个或多个临时表并javascript对相同 id 进行数量汇总,有两种主要思路:

        • UNION ALL + GROUP BY:简洁高效,适合多表合并,推荐使用。
        • FULL OUTER JOIN:逻辑清晰,适合两个表逐字段对齐场景。

        在实际业务开发中,应根据临时表数量和需求灵活选择方案。对于多来源的统计计算,建议统一采用 UNION ALL + GROUP BY,既保证了性能,也便于扩展。

        以上就是SQL Server临时表合并与数量汇总的实现方法的详细内容,更多关于SQL Server临时表合并与数量汇总的资料请关注编程客栈(www.devze.com)其它相关文章!

        0

        上一篇:

        下一篇:没有了

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜