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
相关产品推荐
相关产品推荐

