来自 数据库 2020-04-30 11:36 的文章
当前位置: 网上澳门金莎娱乐 > 数据库 > 正文

Sql Server 分组统计并合计总数及WITH ROLLUP应用

WITH ROLLUP 在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 复制代码 代码如下: SELECT [Source], COUNT(*) AS OrderTotal FROM [ExternalOrder] Where OrderStatus=1 AND (CheckPayment=1 ) and TicketDate = '2012-11-1' AND TicketDate '2012-12-1' GROUP BY [Source] WITH ROLLUP Order by [Source] desc 结果集: 复制代码 代码如下: Source OrderTotal ZongHengV2 215 ZongHeng 3889 YixingSky 3919 YiSkyV2 901 Wanggou 1034 Uni800 1151 TaoBao 3876 ShanglvPT 897 Shanglvbao 426 Qunar 9878 PiaoMeng 429 KuXun 1549 JinRi 2661 HangTuo 140 HangLvTong 7 EasyGo 501 Aooxing 5458 AirPP 3299 yi 8677 Book 2401 19479 NULL 70787

关于with cube ,with rollup 和 grouping

通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

再看看对grouping的解释:

当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0。

仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。

当看到以上的解释肯定非常的模糊,不知所云和不知道该怎样用,下面通过实例操作来体验一下:

先建表:复制代码 代码如下:CREATE TABLE [dbo].[PeopleInfo]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [numb] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [phone] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [FenShu] [int] NULL ) ON [PRIMARY]向表插入数据:复制代码 代码如下:insert into peopleinfo([name],numb,phone,fenshu) values ('李欢','3223','1365255',80) insert into peopleinfo([name],numb,phone,fenshu) values ('李欢','322123','1',90) insert into peopleinfo([name],numb,phone,fenshu) values ('李名','3213112352','13152',56) insert into peopleinfo([name],numb,phone,fenshu) values ('李名','32132312','13342563',60) insert into peopleinfo([name],numb,phone,fenshu) values ('王华','3223','1365255',80)查询出插入的全部数据:复制代码 代码如下:select * from dbo.PeopleInfo结果如图:

操作一:先试试:1, 查询所有数据;2,用group by 查询所有数据;3,用with cube。这三种情况的比较

SQL语句如下:复制代码 代码如下:select * from dbo.PeopleInfo --1, 查询所有数据; select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb --2,用group by 查询所有数据; select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with cube --3,用with cube。这三种情况的比较结果如图:

结果分析:

用第三种(用with cube)为什么会多出来有null的字段值呢?通过分析图上的值得组合会发现是怎么回事儿了,以第三条数据为例:它只是把姓名是的分为了一组,而没有考虑,所以有多出来了第三条数据,也说明了170是怎么来的。其他的也是这样。再回顾一下帮助文档的解释:CUBE 生成的结果集显示了所选列中值的所有组合的聚合, 发现明了了许多。

操作二:1,用with cube;2,用with rollup 这两种情况的比较**

本文由网上澳门金莎娱乐发布于数据库,转载请注明出处:Sql Server 分组统计并合计总数及WITH ROLLUP应用

关键词: