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

ASP.NET开发中合并两表并按Col1汇总Col2的SQL语句编写需求

解决两表合并并对重复col1的col2求和的SQL方案

嘿,这个需求我刚好处理过类似的,其实核心思路就是先把两张表的数据完整合并,再按col1和col3分组做聚合计算就行,不过要注意col2是带$的字符串格式,得先转成数值类型才能进行求和运算,最后再转回带$的格式。

完整SQL语句

SELECT 
    col1,
    CONCAT('$', CAST(SUM(CAST(REPLACE(col2, '$', '') AS DECIMAL(10,2))) AS VARCHAR(20))) AS col2,
    col3
FROM (
    -- 用UNION ALL合并两张表的所有数据(保留重复行,确保聚合准确)
    SELECT col1, col2, col3 FROM Table1
    UNION ALL
    SELECT col1, col2, col3 FROM Table2
) AS CombinedData
-- 按col1和col3分组,因为同一col1对应的col3应该是一致的(比如示例中123对应都是Tom)
GROUP BY col1, col3
-- 可选:按col1排序,让结果更规整
ORDER BY col1;

关键步骤解释

  • UNION ALL合并数据:用UNION ALL而不是UNION,因为UNION会自动去重,会丢失需要聚合的重复col1数据,导致求和错误。
  • 处理col2的格式转换:
    • REPLACE(col2, '$', ''):去掉col2中的$符号,得到纯数字字符串
    • CAST(...) AS DECIMAL(10,2):把纯数字字符串转换成十进制数值,支持精确的小数运算
  • 聚合求和:SUM(...)对同一col1和col3分组下的所有col2数值求和
  • 还原格式:CONCAT('$', ...)把求和后的数值重新拼接成带$的字符串格式

额外说明

如果你的col2字段在数据库中本身就是数值类型(比如DECIMAL或MONEY,只是前端显示时加上$),那代码可以简化很多,不需要格式转换,直接求和后再格式化即可:

SELECT 
    col1,
    CONCAT('$', CAST(SUM(col2) AS VARCHAR(20))) AS col2,
    col3
FROM (
    SELECT col1, col2, col3 FROM Table1
    UNION ALL
    SELECT col1, col2, col3 FROM Table2
) AS CombinedData
GROUP BY col1, col3
ORDER BY col1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:28:04