`
bigfirebird
  • 浏览: 127562 次
  • 性别: Icon_minigender_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 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)=1
select 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
分享到:
评论

相关推荐

    SQLSERVER中union,cube,rollup,cumpute运算符使用说明

    最后,COMPUTE子句在SQLSERVER的老版本中使用,用于在SELECT语句中进行列的计算和汇总,但现在已被更强大的聚合函数(如SUM, AVG, COUNT等)和GROUP BY子句取代。在新的SQLSERVER版本中,COMPUTE已经不再推荐使用,...

    SQL Server经典

    6. **CUBE | ROLLUP处理**:如果使用了CUBE或ROLLUP关键字,SQL Server会在VT5的基础上插入超组(汇总行),生成虚拟表VT6。 7. **HAVING子句**:紧接着,SQL Server会对VT6应用HAVING条件。只有满足HAVING条件的组...

    SQLServer数据库复杂查询示例

    在SQLServer数据库中,复杂查询通常涉及到多个表的联接(JOIN)、子查询、聚合函数(GROUP BY)、分组层次(ROLLUP/CUBE/GROUPING SETS)以及窗口函数(Window Functions)。这些技术使得我们可以从庞大的数据集中...

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    sql rollup用法 小计汇总

    SQL中的ROLLUP操作是用于创建多级汇总的一种方法,它在Oracle和SQL Server等数据库管理系统中都得到了广泛的应用。ROLLUP操作与GROUP BY语句一起使用,可以生成数据的上卷(roll-up)或聚合视图,即从最细粒度的数据...

    SqlServer2000

    15. **`COMPUTE BY`**:在SQL Server 2000中,`COMPUTE BY`可以用来计算每组的总计,但此功能在后续版本中被`ROLLUP`和`CUBE`所取代。 以上就是关于SQL Server 2000中`SELECT`语句的一些基本用法和高级特性。如果你...

    精通SQL--结构化查询语言详解

    10.3.3 在having子句中使用相关子查询 201 10.4 嵌套子查询 203 10.5 使用子查询创建视图 204 10.6 树查询 205 第11章 数据插入操作 209 11.1 插入单行记录 209 11.1.1 基本语法 209 11.1.2 整行插入 209 ...

    SQL Server 2008 新特性 总结复习(一)

    2. **sql_variant**:这种数据类型能够存储任何SQL Server支持的数据类型,类似于C#中的`object`类型。这使得在处理多种类型数据时更为灵活,但也可能导致性能问题,因为它需要更多的存储空间和处理时间。 3. **...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    SQL21自学通教程资料.pdf

    文档中提到的"SELECT"关键字是SQL查询的核心,用于从数据库中检索数据。其他常用关键字如"COUNT"、"SUM"、"AVG"、"MAX"、"MIN"分别用于统计数据的行数、总和、平均值、最大值和最小值。"VARIANCE"和"STDDEV"分别用于...

    SQL查询技巧(范例宝典)

     实例324 在分组查询中使用ALL关键字 473  实例325 在分组查询中使用CUBE运算符 475  实例326 在分组查询中使用ROLLUP 477  实例327 对数据进行降序查询 479  实例328 对数据进行多条件排序 480 ...

    sql查询的逻辑执行顺序

    - **执行逻辑**:通过使用`CUBE`或`ROLLUP`关键字,可以生成各种可能的分组结果,包括总和、各个子组的总和等。 ##### 7. HAVING - **作用**:在GROUP BY之后对结果进行进一步筛选。 - **执行逻辑**:使用`...

    T-SQL语句执行的顺序

    在SQL语言中,T-SQL(Transact-SQL)是微软SQL Server数据库管理系统所使用的扩展SQL语法。了解T-SQL语句的执行顺序对于优化查询性能和编写更高效的代码至关重要。以下是对标题和描述中所述知识点的详细说明: 1. *...

    SQL Server SQL高级查询语句小结

    SQL Server的高级查询语句是数据库管理中的核心部分,它们帮助我们从大量数据中提取有用信息,进行复杂的分析和操作。以下是对标题和描述中提到的一些关键知识点的详细解释: 1. **基本查询**: - `SELECT`:用于...

    SQL 中实现列转成行的两种实现方法

    另一种方法是在`GROUP BY`语句中使用`WITH ROLLUP`,这将创建一个层次结构的聚合结果,包括所有子集和总和。不过这种方法在某些场景下可能会返回过多的数据,所以需要谨慎使用。 ```sql SELECT student_id, CASE ...

    sql 分组,统计等常用语句

    文件中提到的关于SQL Server 2000到2005的数据迁移过程虽然与主题不太相关,但也提到了一种常见的数据库升级方法。简单来说,可以从旧版本的数据库备份数据,然后在新版本中恢复这些数据。这种方法适用于大多数...

    一些常用的sql查询语句收藏

    在SQL Server中使用TOP,在MySQL中使用LIMIT。例如: ```sql SELECT TOP 10 * FROM table_name; -- SQL Server SELECT * FROM table_name LIMIT 10; -- MySQL ``` 10. **更新和删除操作**:UPDATE用于修改现有...

    T-sql简单介绍

    T-SQL是Microsoft SQL Server使用的SQL方言,它在标准SQL的基础上增加了一些扩展功能,使其更加强大且灵活。以下是从标题、描述以及部分内容中提取到的重要知识点: ### T-SQL简介 T-SQL是一种用于管理SQL Server...

    数据库管理与开发项目教程-教案-07项目四:使用T-SQL查询表数据-任务3连接查询.docx

    这些函数通常在SELECT和HAVING子句中使用。 3. COMPUTE BY与GROUP BY HAVING的区别: - GROUP BY:用于将数据按一个或多个列进行分组,常与聚合函数一起使用。 - COMPUTE BY:在SQL Server中,它类似GROUP BY,...

Global site tag (gtag.js) - Google Analytics