用SQL实现统计报表中的“小计”和“合计”
客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关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 =@k +1
select @strfname=zcxt from #TBype1 where fid =@k
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 zcxt=@strfname
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 zcxt=@strfname
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
用SQL实现统计报表中的“小计”和“合计”相关推荐
- mysql小计_Mysql必读用SQL实现统计报表中的小计与合计的方法详解
<Mysql必读用SQL实现统计报表中的"小计"与"合计"的方法详解>要点: 本文介绍了Mysql必读用SQL实现统计报表中的"小计&qu ...
- mysql 合计 小计_用SQL实现统计报表中的小计与合计的方法详解
本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下 客户提出需求,针对某一列分组加上小计,合计汇总.网上找了一 ...
- oralce rollup 小计合计_用SQL实现统计报表中的“小计”和“合计”
在开发统计报表的过程中,经常会碰到在查询到的数据集中,插入一些小计行和合计行.比如在烤烟系统中,几乎每个统计报表都需要加入"合计"行,还有不少涉及到烟叶等级的统计报表需要加入各烟叶 ...
- mysql中group小计与合计_用SQL实现统计报表中的“小计”和“合计”
问题: 开发一个关于各烟叶等级的二次验级的原发件数.原发重量及验收重量的统计报表.其中,原发件数.原发重量和验收重量等列要求计算出各等级组别的小计和所有记录的合计. 语句: SELECT DECODE ...
- Oracle 分析函数over,列转行函数pivot理解及综合运用(报表中的小计和合计)
1.Over函数(分析统计函数) 1.1语法 sum/avg/count() over(partition by ..) over()在什么条件之上; partition by 按哪个字段划分组: 1 ...
- SAP小技巧之 实现SMARTFORM打印中的小计与总计
点击蓝字 关注我们 一 前言 公众号群里面有人在讨论SMARTFORM打印中的小计和总计的实现.好久没有做SMARTFORM了, 所以没有参与讨论. 后来网上查询了一下. 也没有找到很好的解决方案.所 ...
- oracle小鸡与合计,Excel EXCEL表中怎样快速实现小计和合计!excel小鸡 合计 总计
怎么用EXCEL做每页自动小计? 步骤1 :前面插一列,在2至6入1,7至11行输入2.然后先取A2:A11,双击右下角向下填充,填充方式为复制单元格. 步骤2:选取整个数据表,数据 - 分类汇总 , ...
- Ureport2小计和合计功能
原报表样式如下: 我们希望根据做小计和合计功能,希望实现的报表结果如下: 第一步: 先按要求设计如下报表: 此处主要说明三个sum(C1)的配置,基础配置不在复述,如果基础配置有问题,请查阅资料 ht ...
- Oracle关于分组小计再合计
其实在之前就写过mysql关于分组小计再合计,只是当时限于知识和眼界所限,所以给了一个不能算是通用的方案的方案,仅仅只是从效果上完成了任务.随着时间的发展,见识到的东西也多了些,近期在使用Oracle ...
最新文章
- arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】
- 分析MAC*.a库文件信息
- 备份全网服务器数据生产架构方案案例模型
- PM应该找哪些副业?
- Text store debug FM CRM_TEXT_MAINTAIN_OW
- ASP.NET Core启动地址配置方法及优先级顺序
- 双目相机定位3d python_用深度学习实现 2D 到 3D 的转换
- 杨潮观《偷桃捉住东方朔》
- php運行環境,php運行環境搭建!!!
- html ul li 的高度,ul与li高度不一致
- videojs--跨浏览器的HTML视频播放器(可自定义样式)
- 泛微OA漏洞(综合)
- 阿里云弹性云桌面、传统PC和虚拟桌面VDI区别对比
- Linux嵌入式系统的电子相册代码,基于嵌入式Linux和Qt编程实现数码相框的设计
- 【NLP】第16章 使用RNN 和注意力的自然语言处理
- python生成简单二维码_使用Python生成个性二维码
- 2017华东师范大学网络赛—A
- dsb调制与解调的matlab,DSB调制与解调的MATLAB实现及.pptx
- vb.net 编写的简易串口调试程序
- Docker 搭建Hfish蜜罐平台