用SQL实现统计报表中的“小计”和“合计”

问题:

开发一个关于各烟叶等级的二次验级的原发件数、原发重量及验收重量的统计报表。其中,原发件数、原发重量和验收重量等列要求计算出各等级组别的小计和所有记录的合计。

语句:

SELECT DECODE(GROUPING(T4.TOBACCO_CLASS_TYPE) + GROUPING(T1.TOBACCO_CLASS_NAME),

1,

DECODE(T4.TOBACCO_TYPE,

51, ‘上等烟小计’,

52, ‘中等烟小计’,

53, ‘下等烟小计’,

54, ‘低等烟小计’,

‘小计’),

2,

‘合计’,

T1.TOBACCO_CLASS_NAME

) TOBACCO_CLASS_NAME,

T4.TOBACCO_CLASS_TYPE,

NVL(SUM(T1.ORG_PIECE),0) TOTAL_ORG_PIECE,

NVL(SUM(T1.ORG_WEIGHT), 0) TOTAL_ORG_WEIGHT,

NVL(SUM(T1.AMOUNT), 0) TOTAL_AMOUNT

FROM     VI_FK_BALANCE_DETAIL T1, TB_TOBACCO_CLASS T4

WHERE    T1.TOBACCO_CLASS_ID=T4.TOBACCO_CLASS_ID

AND T1.ACCOUNT_YEAR=T4.ACCOUNT_YEAR

AND T4.DEL_FLAG=0

AND T4.ENABLE_FLAG=0

AND T1.REC_DATE > TO_DATE(‘2006-11-05’, ‘YYYY-MM-DD’

GROUP   BY   ROLLUP( T4.TOBACCO_CLASS_TYPE,T1.TOBACCO_CLASS_NAME)

ORDER   BY  T4.TOBACCO_CLASS_TYPE

通过查询得到统计结果如下表所示,该表的统计结果已经满足了统计要求。


烟叶等级


等级组别


原发件数


原发重量


验收重量


(B1F)上桔一


51


4945


197800


197508.1


(B2F)上桔二


51


8335


333400


332316.9


(C1F)中桔一


51


694


27760


27610.54


(C2F)中桔二


51


803


32120


31650.4


(C3F)中桔三


51


6381


255240


255372.6


(X1F)下桔一


51


75


3000


3012.2


上等烟小计


51


21233


849320


847470.8


(B3F)上桔三


52


4701


188040


187389.9


(B4F)上桔四


52


122


4880


4866.81


(C3V)中微青三


52


174


6960


6934.06


(C4F)中桔四


52


4639


185560


185276.4


(X2F)下桔二


52


1739


69560


69029.79


(X2V)下微青二


52


26


1040


1038.34


(X3F)下桔三


52


1263


50520


50439.86


等烟小计


52


12664


506560


504975.1


(X4F)下桔四


53


102


4080


4075.62


下等烟小计


53


102


4080


4075.62


(B3K)上杂三


54


0


0


249.39


低等烟小计


54


0


0


249.39


合计


 


33999


1359960


1356771

时间: 2024-10-13 03:41:52

用SQL实现统计报表中的“小计”和“合计”的相关文章

oracle里面用sql做报表并带小计合计常用到的函数

1-- DECODE函数是Oracle PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%:工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else

【转】rollup、cub、grouping sets、grouping、grouping_id在报表中的应用

摘自 http://blog.itpub.net/26977915/viewspace-734114/ 在报表语句中经常要使用各种分组汇总,rollup和cube就是常用的分组汇总方式. 第一:group by rollup 1.如果使用诸如group by rollup(A,B,C)的方式分组,那么返回的分组结果是(A,B,C) (A,B) (A) (NULL) 一共四种结果.即从右到左递减,最后来个合计. 例如: SQL> select * from t; YEARS     MONTHS

SQL Server 如何通过SQL语句定位SSRS中的具体报表

在一些IT技术人员的推广.简单培训后,公司很多部门都有一些非IT技术人员参与开发各自需求的Reporting Service报表.原因很简单,罗列出来的原因大概有这样一些: IT部门的考量: 1:IT部门这边工作量很大,跟进各个项目都力不从心.不想腾出精力和时间来解决各个部门层出不穷的报表需求. 2:IT技术人员可能对各个部门的业务的理解和那些精通业务的员工有一定的差距.业务人员才是真正懂得应用需求的核心人员. 3:这些报表的需求变跟和后续维护实在是一个不小的工作量.IT的人手.资源实在有些不足

SQL点滴12—SQL Server备份还原数据库中的小把戏

原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, but 2 media families are expected according to the backup device specification”.如下图: 解决办法是首先选中击上一次备份的文件,点击Remove,去掉当前的备份文件,然后再点击OK备份.这样才能正确的备份.也在微软帮助

一个统计报表sql问题

今天朋友问我了一个统计报表的sql问题.我弄了好久.终于算是写出来了.这里记录下. 问题: id--------------name--------------addtime1                       a                      2014-01-01 02:30:211                       b                      2014-01-03 03:20:021                       c      

SQL Server统计信息:问题和解决方式

在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看原文:SQL Server Statistics: Problems and Solutions 正文: SQL Server统计信息协助查询优化器计算执行查询的最优方式. Holger描写叙述了常见的统计信息出错的事情,而且怎样改善 通常你不须要太操心运行SQL查询的方式.他们被传送到查询优化器,

SQL Server统计信息:问题和解决方案

在网上看到一篇介绍使用统计信息出现的问题已经解决方案,感觉写的非常全面.在自己看的过程中顺便做了翻译.由于本人英文水平有限,可能中间有一些错误.如果有哪里有问题欢迎大家批评指正.建议英文好的直接看原文:SQL Server Statistics: Problems and Solutions 正文: SQL Server统计信息协助查询优化器计算运行查询的最优方式. Holger描述了常见的统计信息出错的事情,并且如何改善 通常你不需要太担心执行SQL查询的方式.他们被传送到查询优化器,首先检查

集算器实现报表中零散的不规则计算

报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现.这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比:学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数:用户充值统计中充值金额超过充值总额一半的用户数量等. 通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法. 1.实例一 1.1 .报表描述 根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额.

SQL Server 统计信息维护策略的选择

SQL Server 统计信息维护策略的选择 问题描述: 在对OLTP系统的一个上千万的表做归档后,循环分批删除源表数据时,业务应用收到超时告警,如下: V1.1.1.1: ****Process - QueryTransactionFor****: 23075129 Timeout expired.   The timeout period elapsed prior to completion of the operation or the server is not responding.