用SQL实现统计报表中的"小计"与"合计"的方法详解
2023-06-13 09:15:01 时间
客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关SQL加合计的语句。都不是很理想。决定自己动手写。
思路有三个:
优点:实现代码简洁,要求对GROUPPING和ROLLUP很深的理解。
缺点:低版本的SqlServer不支持。
优点:思路逻辑简洁。
缺点:复杂和低效。
优点:思路逻辑简洁,执行效率高。SQL实现简单。
缺点:数据量大时耗用内存.
综合三种情况,决定“利用临时表”实现。
加上小计,合计后效果
SQL语句
select*into#TBfromTB
select*into#TB1from#TBwhere1<>1
selectdistinctzcxtinto#TBypefrom#TBorderbyzcxt
selectidentity(int,1,1) fid,zcxtinto#TBype1from#TBype
DECLARE@iint
DECLARE@kint
select@i=COUNT(*)from#TBype
set@k=0
DECLARE@strfnamevarchar(50)
WHILE@k<@i
BEGIN
Set@k=@k+1
select@strfname=zcxtfrom#TBype1wherefid=@k
setIDENTITY_INSERT#TB1ON
insertinto#TB1(fid,qldid,fa_cardid,ztbz,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,zcxt,fa_ljjzzb)
selectfid,qldid,fa_cardid,ztbz,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,zcxt,fa_ljjzzbfrom
(
select*from#TBwherezcxt=@strfname
unionall
select0fid,""qldid,""fa_cardid,""ztbz,"小计"fa_name,""model,sum(i_number)asi_number,""gzrq,sum(CAST(zcyzasmoney))aszcyz,sum(CAST(ljzjasmoney))asljzj,sum(CAST(jzasmoney))asjz,""sybm,""zcxt,Sum(fa_ljjzzb)asfa_ljjzzb
from#TBwherezcxt=@strfname
groupbyztbz
)asB
setIDENTITY_INSERT#TB1off
END
selectqldid,fa_cardid,zcxt,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,ztbz,fa_ljjzzbfrom#TB1
unionall
select""qldid,""fa_cardid,""ztbz,"合计"fa_name,""model,sum(i_number)asi_number,""gzrq,sum(CAST(zcyzasmoney))aszcyz,sum(CAST(ljzjasmoney))asljzj,sum(CAST(jzasmoney))asjz,""sybm,""zcxt,Sum(fa_ljjzzb)asfa_ljjzzb
from#TB
droptable#TB1
droptable#TBype1
droptable#TBype
droptable#TB
扩展改进
可以改写成一个通用的添加合计小计的存储过程。
相关文章
- 使用可视化工具和统计方法检测异常值
- TIA博途SCL编程学习19_分数段人数统计
- zblog主题模板域名授权信息统计
- 生存分析中的统计检验方法你用对了吗?
- mysql条件统计
- MySQL中SQL语句的使用方法(mysql中sql语句)
- Linux统计文件行数的简便方法(linux输出文件行数)
- MySQL中统计字段的方法(mysql统计字段)
- 目录的作用解析Linux下us统计目录的实际作用(linux下usr)
- Linux统计文件数量的简单方法(linux统计文件的数量)
- 利用Linux快速统计文件行数的方法(linux统计文件行数)
- MySQL教程:拼接SQL语句的方法(mysql拼接sql语句)
- 优化MySQL统计查询:提升效率的方法(mysql统计查询优化)
- Oracle 数据库:轻松删除统计信息的方法分享(oracle删除统计信息)
- Oracle多条SQL的执行方法及优化建议(oracle多条sql)
- MySQL 中 SQL 比较详解常用语句及其实现方法(mysql中sql比较)
- 深入了解MySQL探讨不同ID数量的统计方法(mysql不同id的个数)
- Oracle SQL中最多的数量统计实例(oracle sql数量)
- php统计文章排行示例
- Python开发的单词频率统计工具wordsworth使用方法
- C#统计字符串里中文汉字个数的方法