转
首先创建测试表、添加数据。
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
分享到:
相关推荐
最后,COMPUTE子句在SQLSERVER的老版本中使用,用于在SELECT语句中进行列的计算和汇总,但现在已被更强大的聚合函数(如SUM, AVG, COUNT等)和GROUP BY子句取代。在新的SQLSERVER版本中,COMPUTE已经不再推荐使用,...
6. **CUBE | ROLLUP处理**:如果使用了CUBE或ROLLUP关键字,SQL Server会在VT5的基础上插入超组(汇总行),生成虚拟表VT6。 7. **HAVING子句**:紧接着,SQL Server会对VT6应用HAVING条件。只有满足HAVING条件的组...
在SQLServer数据库中,复杂查询通常涉及到多个表的联接(JOIN)、子查询、聚合函数(GROUP BY)、分组层次(ROLLUP/CUBE/GROUPING SETS)以及窗口函数(Window Functions)。这些技术使得我们可以从庞大的数据集中...
介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...
SQL中的ROLLUP操作是用于创建多级汇总的一种方法,它在Oracle和SQL Server等数据库管理系统中都得到了广泛的应用。ROLLUP操作与GROUP BY语句一起使用,可以生成数据的上卷(roll-up)或聚合视图,即从最细粒度的数据...
15. **`COMPUTE BY`**:在SQL Server 2000中,`COMPUTE BY`可以用来计算每组的总计,但此功能在后续版本中被`ROLLUP`和`CUBE`所取代。 以上就是关于SQL Server 2000中`SELECT`语句的一些基本用法和高级特性。如果你...
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 ...
2. **sql_variant**:这种数据类型能够存储任何SQL Server支持的数据类型,类似于C#中的`object`类型。这使得在处理多种类型数据时更为灵活,但也可能导致性能问题,因为它需要更多的存储空间和处理时间。 3. **...
│ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...
文档中提到的"SELECT"关键字是SQL查询的核心,用于从数据库中检索数据。其他常用关键字如"COUNT"、"SUM"、"AVG"、"MAX"、"MIN"分别用于统计数据的行数、总和、平均值、最大值和最小值。"VARIANCE"和"STDDEV"分别用于...
实例324 在分组查询中使用ALL关键字 473 实例325 在分组查询中使用CUBE运算符 475 实例326 在分组查询中使用ROLLUP 477 实例327 对数据进行降序查询 479 实例328 对数据进行多条件排序 480 ...
- **执行逻辑**:通过使用`CUBE`或`ROLLUP`关键字,可以生成各种可能的分组结果,包括总和、各个子组的总和等。 ##### 7. HAVING - **作用**:在GROUP BY之后对结果进行进一步筛选。 - **执行逻辑**:使用`...
在SQL语言中,T-SQL(Transact-SQL)是微软SQL Server数据库管理系统所使用的扩展SQL语法。了解T-SQL语句的执行顺序对于优化查询性能和编写更高效的代码至关重要。以下是对标题和描述中所述知识点的详细说明: 1. *...
SQL Server的高级查询语句是数据库管理中的核心部分,它们帮助我们从大量数据中提取有用信息,进行复杂的分析和操作。以下是对标题和描述中提到的一些关键知识点的详细解释: 1. **基本查询**: - `SELECT`:用于...
另一种方法是在`GROUP BY`语句中使用`WITH ROLLUP`,这将创建一个层次结构的聚合结果,包括所有子集和总和。不过这种方法在某些场景下可能会返回过多的数据,所以需要谨慎使用。 ```sql SELECT student_id, CASE ...
文件中提到的关于SQL Server 2000到2005的数据迁移过程虽然与主题不太相关,但也提到了一种常见的数据库升级方法。简单来说,可以从旧版本的数据库备份数据,然后在新版本中恢复这些数据。这种方法适用于大多数...
在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是Microsoft SQL Server使用的SQL方言,它在标准SQL的基础上增加了一些扩展功能,使其更加强大且灵活。以下是从标题、描述以及部分内容中提取到的重要知识点: ### T-SQL简介 T-SQL是一种用于管理SQL Server...
这些函数通常在SELECT和HAVING子句中使用。 3. COMPUTE BY与GROUP BY HAVING的区别: - GROUP BY:用于将数据按一个或多个列进行分组,常与聚合函数一起使用。 - COMPUTE BY:在SQL Server中,它类似GROUP BY,...