首先创建测试表、添加数据。
create table #t(a int,b int,c int,d int,e int)
insert into #t values(1,2,3,4,5)
insert into #t values(1,2,3,4,6)
insert into #t values(1,2,3,4,7)
insert into #t values(1,2,3,4,8)
insert into #t values(1,3,3,4,5)
insert into #t values(1,3,3,4,6)
insert into #t values(1,3,3,4,8)
insert into #t values(1,3,3,4,7)

insert into #t values(2,2,2,4,5)
insert into #t values(2,2,3,4,6)
insert into #t values(2,2,4,4,7)
insert into #t values(2,2,5,4,8)
insert into #t values(2,3,6,4,5)
insert into #t values(2,3,3,4,6)
insert into #t values(2,3,3,4,8)
insert into #t values(2,3,3,4,7)

情况一:只有一个分类汇总列时,只需要一个合计。只需要增加with rollup即可。
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
sum(b),sum(c),sum(d),sum(e) from #t group by a with rollup

情况二:有多个分类汇总列,只需要一个合计.增加rollup之后,需要增加判断。
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    b,
sum(c),sum(d),sum(e) from #t
group by a,b with rollup
having grouping(b)=0 or grouping(a)=1select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    b,
    c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(c)=0 or grouping(a)=1

情况三:有多个分类汇总列,需要全部的小计和合计。
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end b,
    case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup
另外一种显示小计的方式
select case when grouping(a)=1 then '合计'
    when grouping(b)=1 then cast(a as varchar)+'小计'
    else cast(a as varchar) end a,
    case when grouping(b)=0 and grouping(c)=1
    then cast(b as varchar)+'小计' else cast(b as varchar) end b,
    case when grouping(c)=1 and grouping(b)=0
    then '' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup

情况四:有多个分类汇总列,需要部分的小计和合计
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    b,
    case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=0
select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end b,
    c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=1 or grouping(c)=0

转自:http://www.cnblogs.com/yiway/archive/2007/11/12/957281.html

SQL Server中Rollup关键字使用技巧相关推荐

  1. SQL Server中Rollup关键字使用技巧 (转)

    首先创建测试表.添加数据. create table #t(a int,b int,c int,d int,e int) insert into #t values(1,2,3,4,5) insert ...

  2. SQL SERVER中ROLLUP的用法

    cube操作符 要使用cube,首先要了解group by 其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别, cube将返回的更多的可能组 ...

  3. SQL Server中的查询优化技术:提示和技巧

    描述 (Description) Fixing bad queries and resolving performance problems can involve hours (or days) o ...

  4. SQL Server中的小技巧(重复、替换、截取、去空格、去小数点后的位数)

    PS:随笔写的在SQL Server中要用到的 (重复.替换.截取.去空格.去小数点后的位数) /*---------------------------重复--------------------- ...

  5. sql server中除数为零的处理技巧

    在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...

  6. 十步优化SQL Server中的数据访问

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  7. SQL Server中的表变量

    In this article, we will explore the table variable in SQL Server with various examples and we will ...

  8. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  9. SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦.本文介绍在SQL Server中读取XML文件的简单做法. ...

最新文章

  1. ActiveMQ常见问题
  2. 【原创】POSTGRESQL 分区表初次体验
  3. 数据类型与数据传送指令
  4. 现代密码学1.3--古典密码/historical cipher
  5. win10家庭版如何开启组策略
  6. mysql5.7java安装步骤_MySQL5.7安装步骤
  7. 我设想的可扩展结构(插件) (二)
  8. Egg教程_Egg.js视频教程免费分享
  9. 企业生存与发展的前提是安全
  10. Unity---MainTemplate.gradle配置取消v2签名
  11. 编辑器拓展 CustomEditor
  12. java 日期格式化工具类
  13. 技术经理成长复盘-激励
  14. Python练习——基础练习题1
  15. xAxis、yAxis-配置项
  16. javaScript改变this指向的三种方法
  17. mongodb数据库的下载、安装、配置与使用
  18. java有关物流管理的简历_谁能给我提供一份物流管理专业毕业生的个人模范简历...
  19. 计算机就业最好的专业排名,就业前景最好的15个专业排名,理工类专业占大头,前三都有谁?...
  20. 萧乾升:4.14黄金,白银TD,纸白银,最新行情分析

热门文章

  1. 数据结构之Treap
  2. 程序员面试题精选100题(61)-数对之差的最大值[算法]
  3. 趣味编程:从字符串中提取信息(参考答案 - 下)
  4. python中文件的读取与写入以及os模块
  5. Android之内存泄露、内存溢出、内存抖动分析
  6. bzoj1208: [HNOI2004]宠物收养所
  7. 模拟业务最小测试用例01
  8. ASM心跳超时检测之--Delayed ASM PST heart beats
  9. DNS原理及简单配置
  10. 重定向dup2的本质