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

--说明:个人学习笔记,实现小计合计显示,分组按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
--*/

(0)

相关推荐

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

    --说明:个人学习笔记,实现小计合计显示,分组按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.00UNION ALL SELECT '2

  • vue动态合并单元格并添加小计合计功能示例

    1.效果图 2.后台返回数据格式(平铺式) 3.后台返回数据后,整理所需要展示的属性存储到(items)数组内 var obj = { "id": curItems[i].id, "feeName": curItems[i].feeName, "projectName": curItems[i].projectName, "projectDetailsName": curItems[i].projectDetailsName,

  • 用SQL实现统计报表中的"小计"与"合计"的方法详解

    客户提出需求,针对某一列分组加上小计,合计汇总.网上找了一些有关SQL加合计的语句.都不是很理想.决定自己动手写.思路有三个:1.很多用GROUPPING和ROLLUP来实现.  优点:实现代码简洁,要求对GROUPPING和ROLLUP很深的理解.  缺点:低版本的Sql Server不支持. 2.游标实现.  优点:思路逻辑简洁.  缺点:复杂和低效. 3.利用临时表.  优点:思路逻辑简洁,执行效率高.SQL实现简单.  缺点:数据量大时耗用内存. 综合三种情况,决定"利用临时表"

  • 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用法 小计汇总

    这里介绍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

  • PHP防止sql注入小技巧之sql预处理原理与实现方法分析

    本文实例讲述了PHP防止sql注入小技巧之sql预处理原理与实现方法.分享给大家供大家参考,具体如下: 我们可以把sql预处理看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制. 我们来看下它有什么好处: 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行). 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句. 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性. 这种预处理呢,可以通过两个方式,咱们这次要说

  • 微信小程序拖拽排序列表的示例代码

    拖拽排序列表 思路 界面分为两层: 底层,正常列表展示,拖拽的时候不做处理(大牛直接加了动画,原谅我技艺不精,还没实现) 顶层,movable-view组件,不长按不展示,之后长按才展示,且没有点击事件. 事件 主要监听:longpress , touchmove , touchend 三个事件 longpress 保障长按才有效,并设定许多其他值. touchmove 滑动的时候触发 判断是否需要滑动页面,因为 movable-area组件 滑动事件被catch掉,无法滑动: 记录滑动经过的项

  • 在sql中不指定Order by排序是按照主键吗

    在sql中不指定Order by,排序是按照主键吗?答案是不一定.举个例子: 查询AttendanceEmpRank表,主键是AttendanceEmployeeRankId,而且是聚集索引 执行下面的语句,发现第一句不指定Order by的结果跟第二句不一样. 再看看执行计划,我们可以知道,第一句用到的是Date索引,而第二句用的是主键索引. 再看看另一组sql和查询结果: 执行计划中用到的索引也是不同的: 所以得出结论:在不指定Order by的情况下,sqlserver会根据执行计划实际查

  • 小程序中英文混合排序问题解决

    小程序中英文混合排序问题 在开发一个手机联系人列表的功能时,遇到需求是需要将联系人列表按照拼音顺序排序.而联系人列表是会出现中英文混合的情况.于是遇到了问题. 小程序无法直接中文进行排序 localeCompare函数排序出来的结果不正确 在遇到这个问题的时候,也去网上查过不少,本来觉得比较好用的就是例佣localeCompare函数去进行排序.但是在实际开发的时候发现该函数的排列结果跟网上的不同.(大概是h5跟小程序的区别吧,我也不是很了解~) 最终参考了字母表的方式,采取了类似的做法来实现我

  • javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)

    首先创建html页面为sort.html ,并把下面的内容复制进去 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

随机推荐