博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用SQL实现统计报表中的“小计”和“合计”
阅读量:6932 次
发布时间:2019-06-27

本文共 1714 字,大约阅读时间需要 5 分钟。

   客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关SQL加合计的语句。都不是很理想。决定自己动手写。

思路有三个:
1.很多用GROUPPING和ROLLUP来实现。
  优点实现代码简洁,要求对GROUPPING和ROLLUP很深的理解。
  缺点:低版本的Sql Server不支持。
2.游标实现。
  优点:思路逻辑简洁。
  缺点:复杂和低效。
3.利用临时表。
  优点:思路逻辑简洁,执行效率高。SQL实现简单。
  缺点:数据量大时耗用内存.

综合三种情况,决定“利用临时表”实现。

实现效果

原始表TB

加上小计,合计后效果

SQL语句

 select * into #TB from TB

select * into #TB1 from #TB where 1<>1
select distinct zcxt into #TBype from #TB order by zcxt
select identity(int,1,1)  fid,zcxt into #TBype1 from #TBype
DECLARE @i int
DECLARE @k int
 
 select @i=COUNT(*) from #TBype
 set @k=0
  DECLARE @strfname varchar(50)
 WHILE @k < @i
  BEGIN
   Set @k +1
   select @strfname=zcxt from #TBype1 where fid
   set IDENTITY_INSERT #TB1 ON
      insert into #TB1(fid,qldid,fa_cardid,ztbz,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,zcxt,fa_ljjzzb)
       select fid,qldid,fa_cardid,ztbz,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,zcxt,fa_ljjzzb from
      (
   select * from #TB where
   union all
         select 0 fid,'' qldid,'' fa_cardid,'' ztbz,'小计' fa_name,'' model,sum(i_number) as i_number,'' gzrq,sum(CAST(zcyz as money)) as zcyz,sum(CAST(ljzj as money)) as ljzj,sum(CAST(jz as money)) as jz,'' sybm,'' zcxt,Sum(fa_ljjzzb) as fa_ljjzzb
   from #TB where
   group by ztbz
  ) as B
 set IDENTITY_INSERT #TB1 off
  END
select qldid,fa_cardid,zcxt,fa_name,model,i_number,gzrq,zcyz,ljzj,jz,sybm,ztbz,fa_ljjzzb from #TB1
union all
select '' qldid,'' fa_cardid,'' ztbz,'合计' fa_name,'' model,sum(i_number) as i_number,'' gzrq,sum(CAST(zcyz as money)) as zcyz,sum(CAST(ljzj as money)) as ljzj,sum(CAST(jz as money)) as jz,'' sybm,'' zcxt,Sum(fa_ljjzzb) as fa_ljjzzb
from #TB
drop table #TB1
drop table #TBype1
drop table #TBype
drop table #TB

扩展改进

可以改写成一个通用的添加合计小计的存储过程。

 

转载于:https://www.cnblogs.com/secbook/archive/2011/12/29/2655334.html

你可能感兴趣的文章
mac连接windows远程桌面及文件复制
查看>>
mysql复制
查看>>
android 中wifi的应用
查看>>
《c程序设计语言》-2.6~2.8
查看>>
mac搭建嵌入式编程环境--交叉编译工具链crosstool-ng
查看>>
Dev自带缓冲窗体效果的实现和控制
查看>>
JavaScript 获取鼠标点击位置坐标
查看>>
构造函数不能被继承的原因
查看>>
20165239其米仁增第一周查漏补缺
查看>>
CPU利用率与Load Average的区别
查看>>
Elasticsearch-head使用及ES相关概念
查看>>
湖南2013第九届省赛解题报告(长期拖延更新中。。。)
查看>>
docker-machine基础应用
查看>>
Android NDK开发(1)----- Java与C互相调用实例详解
查看>>
《人月神话》读书笔记之开篇
查看>>
python时间模块总结
查看>>
html基础学习02
查看>>
git commit之后撤销
查看>>
java web Excel下载导出功能
查看>>
机器学习术语
查看>>