使用SQL实现小计,合计以及排序_Mysql

--说明:个人学习笔记,实现小计合计显示,分组按BANK_ID+OP_DATE升序排序

复制代码 代码如下:

--测试数据
CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))
INSERT #TB SELECT '1111','001','20121210',1234567,111.00
UNION ALL SELECT '2222','002','20121210',1234567,222.00
UNION ALL SELECT '3333','001','20121112',1234567,250.00
UNION ALL SELECT '4444','002','20121110',1234567,330.00
UNION ALL SELECT '5555','001','20121210',1234567,300.00
UNION ALL SELECT '6666','002','20121112',1234567,150.00
GO

--查询
SELECT A.ID
 ,A.BANK_ID
 ,A.AMT
 ,B.OP_DATE
 ,B.OPERATOR_NO
FROM
(
(SELECT
 ID=CASE
  WHEN GROUPING(BANK_ID)=1 THEN '合计'
  WHEN GROUPING(ID)=1 THEN '小计'
  ELSE ID END
 ,BANK_ID
    ,SUM(AMT) AMT
    ,ORDER_SIGN1=GROUPING(BANK_ID),ORDER_SIGN2=BANK_ID
    ,ORDER_SIGN3=GROUPING(ID)
FROM #TB
GROUP BY BANK_ID,ID WITH ROLLUP
HAVING GROUPING(ID)=1
UNION ALL --先得出表的统计,再加上表中的数据
SELECT ID
 ,BANK_ID
 ,AMT
 ,ORDER_SIGN1=0,ORDER_SIGN2=BANK_ID
    ,ORDER_SIGN3=0
 FROM #TB) A
LEFT JOIN --为了显示出OP_DATE、OPERATOR_NO
(SELECT ID
 ,OP_DATE
 ,OPERATOR_NO
FROM #TB) B ON A.ID = B.ID
) ORDER BY ORDER_SIGN1,ORDER_SIGN2,ORDER_SIGN3,OP_DATE

GO

--删除测试
DROP TABLE #TB

/*--测试结果
ID BANK_ID AMT OP_DATE OPERATOR_NO
3333 001 250.00 20121112 1234567
5555 001 300.00 20121210 1234567
1111 001 111.00 20121210 1234567
小计 001 661.00 NULL NULL
4444 002 330.00 20121110 1234567
6666 002 150.00 20121112 1234567
2222 002 222.00 20121210 1234567
小计 002 702.00 NULL NULL
合计 NULL 1363.00 NULL NULL
--*/

时间: 2024-10-02 07:35:14

使用SQL实现小计,合计以及排序_Mysql的相关文章

用SQL语句生成带有小计合计的数据集脚本

使用SQL语句生成带有小计合计的数据集: 测试用户: scott 测试用表: dept,emp ////////////////////////////////// //检索出需要进行统计的数据集 select dept.dname,emp.job,sal from emp,dept where emp.deptno=dept.deptno; ////////////////////////////////// //根据部门名称以及职位进行汇总,并为每个部门 生成'小计',最后生成'合计'. s

使用sql语句直接生成带有’小计’,’合计’的数据集

在软件开发过程中经常要做一些报表,而且大部分报表都需要用到根据某一列进行统计,计算出'小计'以及'合计'项目.一般来说大家都是在前台程序中进行处理,其实,用sql语句就可以很轻松的完成这个功能.SQL> select decode(grouping(dept.dname),1,'合计:',dept.dname) dname, 2 decode(grouping(emp.job)+grouping(dept.dname),1,'小计:',emp.job) job,sum(sal) sum_sal

每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)

原文 http://www.cnblogs.com/Olive116/p/3271706.html 2013-8-20 1.    SQL查询表的行列转换/小计/统计(with  rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL查询统计来讲解一下实际开发中比较常用的行列转换/小计/统计等报表统计相关的常用知识点. 题目如下:  查询sales 和stores表,得出1993年每个store每季度销售数量及小计和总计,查询出的

sql小计汇总 rollup用法实例分析_数据库其它

这里介绍sql server2005里面的一个使用实例: CREATE TABLE tb(province nvarchar(10),city nvarchar(10),score int) INSERT tb SELECT '陕西','西安',3 UNION ALL SELECT '陕西','安康',4 UNION ALL SELECT '陕西','汉中',2 UNION ALL SELECT '广东','广州',5 UNION ALL SELECT '广东','珠海',2 UNION ALL

sql rollup用法 小计汇总_mssql2005

这里介绍sql server2005里面的一个使用实例: CREATE TABLE tb(province nvarchar(10),city nvarchar(10),score int)INSERT tb SELECT '陕西','西安',3UNION ALL SELECT '陕西','安康',4UNION ALL SELECT '陕西','汉中',2UNION ALL SELECT '广东','广州',5UNION ALL SELECT '广东','珠海',2UNION ALL SELEC

如何在Access2007表中同时显示明细、小计、总计

问题描述: 如何在Access2007 表中同时显示明细.小计.总计? ID fullname pay 2 a ¥500.00 4 a ¥600.00 5 a ¥700.00 6 b ¥800.00 7 b ¥55.00 有以上格式的表格,要根据 FULLNAME 做小计,然后全部的做总计,变成以下格式 fullname pay a ¥700.00 a ¥600.00 a ¥500.00 a 小计 ¥1,800.00 b ¥55.00 b ¥800.00 b 小计 ¥855.00 总计 ¥2,6

dataGridView如何实现小计和全计的功能

问题描述 邦定数据显示结果如下a_typea_count苹果10苹果20苹果5香蕉10其他6其他6我想在某类下加一条小计记录,结果如下a_typea_count苹果10苹果20苹果5小计35//统计相同类型的数量香蕉10小计10//统计相同类型的数量其他6其他6小计12//统计相同类型的数量这个是我在网上看到人家也有同类的问题这个例子和我碰到的问题一样只不过我查的东西多一点我还想在最后一行加上一个合计就是把所有小计加起来网上的回答有两种一种是用sql写一种是用代码(可惜代码是vb的)本人没学过v

sql-【菜鸟】求小计怎么写

问题描述 [菜鸟]求小计怎么写 求图中的小计怎么写?我已经写完了前边的 select a.problem_generate_name as"problemGenerateName", a.project_name as "projectName", nvl(b.projectBugSum, 0) as projectBugSum, nvl(c.heavy, 0) as heavy, nvl(d.littleHeavy, 0) as littleHeavy, nvl(

rollup-oracle分组小计总计的问题

问题描述 oracle分组小计总计的问题 一个表根据客户类别这个字段分组,有中国电信,并且分为省内省外共3行(字段取值规则是一样的),省内省外根据地域字段刷选.目前我的做法是一行一个sql然后用union处理,可是这样写太耗时耗力了,rollup貌似不能满足我的需求,请问各位大神有没有其他可行的方法 解决方案 oracle小计 解决方案二: 你倒是上图啊- -,把你的原表查询后的结构截图,还有你期望的查询结构用EXCEL画下来 解决方案三: group by 加上rollup 解决方案四: 说的