首先创建测试表、添加数据。
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
分享到:
相关推荐
PL/SQL函数和过程可以使用Oracle的函数和过程语法来编写,而Transact-SQL函数和过程则需要使用SqlServer的函数和过程语法。 例如,Oracle的PL/SQL函数可以这样编写: ```plsql CREATE OR REPLACE FUNCTION get_...
- **SQL Server:** SQL Server同样支持使用子查询进行更新操作,但在某些情况下可能需要重新编写子查询以适应SQL Server的语法。 ```sql UPDATE table_name SET column1 = (SELECT some_expr FROM some_table), ...
### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
在SQLSERVER中,有几种特殊的运算符用于处理和汇总数据,包括UNION、CUBE、ROLLUP和COMPUTE。这些运算符在数据分析和报表生成时非常有用,让我们逐一深入理解它们。 1. **UNION运算符** UNION是用于合并两个或多个...
WITH ROLLUP 在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 代码如下: SELECT [Source], COUNT(*) AS OrderTotal FROM [ExternalOrder] Where ...
sql学习 rollup之 group by 的完美增强.sql
《Microsoft SQL SERVER 2008技术内幕 T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是微软公司为SQL Server定制的SQL方言,它扩展了标准SQL,提供了更强大的数据库...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...
在SQL Server 2005中,`ROLLUP` 是一种用于聚合查询的运算符,它可以帮助我们生成分组的汇总数据,包括单级、多级以及最终的总汇总。在给定的例子中,我们将通过具体例子来了解`ROLLUP`的用法。 首先,我们创建了一...
《Microsoft SQL Server 2005技术内幕全套(二):T-SQL查询》是一部深入探讨SQL Server 2005中T-SQL查询技术的专业著作。T-SQL(Transact-SQL)是微软SQL Server数据库管理系统中用于数据操作和管理的结构化查询...
小编对工作中遇到的用数据库语句进行分类汇总的查询信息的信息。压缩包中附件相关的数据库和 sql脚本。 详细的思路过程见博客:https://blog.csdn.net/aiming66/article/details/80717802
- **查询语句**:将SQL Server中的查询语句稍作调整,主要改动在于日期格式化函数`DATE_FORMAT()`的使用。 **结论**:在复杂查询方面,即使是在低负载环境下,SQL Server仍然表现得比MySQL更快。这一结果可能与两...
例如,当使用 SQL Server 2000 Desktop Engine 或 Microsoft 数据引擎 (MSDE) 1.0 时,数据库大小将限制在 2 GB。 #### 三、其他重要注意事项 - **网络数据包大小**:网络数据包大小是指应用程序与数据库引擎之间...
6. **CUBE | ROLLUP处理**:如果使用了CUBE或ROLLUP关键字,SQL Server会在VT5的基础上插入超组(汇总行),生成虚拟表VT6。 7. **HAVING子句**:紧接着,SQL Server会对VT6应用HAVING条件。只有满足HAVING条件的组...
在SQL Server中,数据汇总是一项常见的任务,用于统计和整理数据。GROUP BY语句是基本的汇总工具,但在处理复杂的汇总需求时,如需要展示分组的子总计和总计,GROUP BY就显得力不从心。这时,WITH ROLLUP运算符就派...
在SQLServer数据库中,复杂查询通常涉及到多个表的联接(JOIN)、子查询、聚合函数(GROUP BY)、分组层次(ROLLUP/CUBE/GROUPING SETS)以及窗口函数(Window Functions)。这些技术使得我们可以从庞大的数据集中...