SQL Server如何用Group by+SUM分组求和并存入Temp Table
SQL Server 发票分组统计写入临时表方案
核心实现代码
替换代码里的源表名为你实际存储发票记录的表名即可直接运行:
-- 清理已存在的同名临时表,避免重复执行报错 IF OBJECT_ID('tempdb..#InvoiceStat_Temp') IS NOT NULL DROP TABLE #InvoiceStat_Temp; -- 按规则分组统计并写入临时表 SELECT NameOfCompany, BaseOfVAT, Type, SUM(Tax1) AS TotalTax1, SUM(Tax2) AS TotalTax2, SUM(Tax3) AS TotalTax3 INTO #InvoiceStat_Temp FROM 替换为你的实际发票表名 GROUP BY NameOfCompany, BaseOfVAT, Type;
实现说明
- 严格按照需求指定的三个维度做分组:
NameOfCompany(企业名称)、BaseOfVAT(增值税计税基数)、Type(发票类型),所有非聚合字段全部加入GROUP BY子句,完全符合SQL Server语法要求,不会触发字段未聚合/未在分组子句的报错 - 三类税额字段直接使用
SUM()做分组合计,字段别名明确标识为汇总值,方便后续关联、查询使用 - 采用
SELECT INTO方式生成临时表,无需提前手动定义临时表结构,SQL Server会自动根据源表字段类型、长度匹配生成对应临时表结构 - 脚本开头增加临时表存在性判断,重复执行不会抛出对象已存在的异常
结果校验
执行完统计后,可以通过条件过滤查询临时表,核对汇总值是否符合预期,比如校验企业X下Type=1的统计结果:
SELECT * FROM #InvoiceStat_Temp WHERE NameOfCompany = '企业X' AND Type = 1
内容的提问来源于stack exchange,提问作者Stefan3D
相关产品推荐
相关产品推荐

