SQL临时表计算Money2列并插入合计行的实现方案咨询
问题解答
1. 需求实现可行性
临时表完全可以实现该需求,以下是完整的SQL实现步骤:
注意你提供的样例DDL中遗漏了
ISCode字段,先执行补列操作同步数据:
ALTER TABLE #tableX ADD ISCode INT NULL; -- 补全样例数据的ISCode值 UPDATE #tableX SET ISCode = 1 WHERE Code1 IN ('GB','2GB') OR Code2='DE'; UPDATE #tableX SET ISCode = 0 WHERE Code1 IN ('AB','CB');
第一步:更新每行的Money2字段
仅处理ISCode=1的行,兼容Sold为NULL/0的异常情况避免报错:
UPDATE #tableX SET Money2 = CASE WHEN Sold IS NULL OR Sold = 0 THEN NULL ELSE Money1 / Sold END WHERE ISCode = 1;
第二步:插入合计行
按规则统计后插入末尾:
INSERT INTO #tableX (ID, Code1, Code2, Sold, Money1, Money2, ISCode) SELECT 1 AS ID, 'total' AS Code1, 'total' AS Code2, SUM(ISNULL(Sold,0)) AS Sold, SUM(Money1) AS Money1, CASE WHEN SUM(ISNULL(Sold,0)) = 0 THEN NULL ELSE SUM(Money1) / SUM(ISNULL(Sold,0)) END AS Money2, 1 AS ISCode FROM #tableX WHERE ISCode = 1;
执行完成后查询SELECT * FROM #tableX即可得到符合要求的结果。
2. 临时表 vs 表值参数选型建议
- 若仅在当前会话独立处理数据、不需要将表数据作为参数传递给存储过程/自定义函数,优先选择临时表:使用更灵活,支持创建索引、自动生成统计信息,处理中大型数据时性能表现更好。
- 只有当需要从应用层批量传递表结构数据到数据库端、或者在不同数据库对象之间传递表结构参数时,才适合使用表值参数。
内容的提问来源于stack exchange,提问作者Selena
相关产品推荐
相关产品推荐

