1.建立测试专用数据;

if object_id('TESTDB') is not null drop table TESTDB

create table TESTDB(A varchar(8), B INT)

insert into TESTDB

select 'A1', 6 union all

select 'A1', 8 union all

select 'A1', 67 union all

select 'A2', 67 union all

select 'A2', 4 union all

select 'A2', 112 union all

select 'A3', 90 union all

此处:可以用SELECT 与 UNION联合的插入方法,方便快捷,前提是插入数据的列与表的列相同;

2.ROW_NUMBER() 使用

ROW_NUMBER()的使用,主要是对数据进行分组时,对组内的数据进行排序,对临时表的内容进行测试,语句如下:

SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B 

执行结果如下:

分析:语句根据A、B进行分组,分组后内部按照A进行分区,B列进行排序,增添NUM计数信息;

3.ROLLUP 与 CUBE 的对比

首先:对于进行ROULLUP排序;

SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B WITH ROLLUP

分析:与无ROLLUP对比,多出来了四行数据,四行数据分别为:

1).单独对A进行分组,忽略B对其用NULL代替;

2)忽略A、B进行分组,即多出一行空值;

以此类推的话:如果是三列A、B、C进行ROLLUP的话,应该是先对A进行分组,再对A、B分组,最后是A、B、C均不考虑就是空值一行,随后测试猜想;对表进行列的增加;

create table TESTDB(A varchar(8), B INT,C varchar(8))

insert into TESTDB

select 'A1', 6,'A' union all

select 'A1', 8,'B' union all

select 'A1', 67,'C' union all

select 'A2', 67,'A' union all

select 'A2', 4 ,'B' union all

select 'A2', 112, 'C' union all

select 'A3', 90, 'D' union all
select 'A3', 6,'D'
SELECT * FROM TESTDB GROUP BY A,B,C WITH ROLLUP

猜想正确,总结出规律为:分别对group分组的列按照顺序,依次组合进行分组,A、B、C则为三个均不考虑,只考虑A,考虑A、B,考虑A、B、C排序即为ROLLUP 的内在逻辑。

4.CUBE的使用

对两列时进行CUBE排序与ROLLUP进行对比

SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B WITH CUBE

对比得知:CUBE排序方式为

GROUP BY   A

GROUP BY B

GROUP BY A、B

NULL行

ROLLUP为:

NULL行

GROUP BY   A

GROUP BY A、B

CUBE要比ROLLUP分别排序的全,内部元素均会一一排序;ROLLUP则为顺序排序。

SQL SEVER (ROLLUP与CUBE,ROW_NUMBER())使用方法的更多相关文章

  1. sql sever跨数据库复制数据的方法【转】

    1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...

  2. sql sever跨数据库复制数据的方法

    1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...

  3. sql sever 创建临时表的两种方法

    创建临时表       方法一:     create table #临时表名( 字段1 约束条件,             字段2 约束条件,                  .....)     ...

  4. 转:GROUPING SETS、ROLLUP、CUBE

    转:http://blog.csdn.net/shangboerds/article/details/5193211 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那 ...

  5. GROUPING SETS、ROLLUP、CUBE

    大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你.还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY ...

  6. java连接到sql sever 2008_java基础学习

    (sql sever 2008跟sql sever 2005装载JDBC驱动的方法是一样的) 一.加载驱动的文字教程 1.准备相关的软件(Eclipse除外,开源软件可以从官网下载) <1> ...

  7. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

  8. [实战经验][SQL Sever 2008 (R)解决方法累积

    SQL Sever 2008 (R)的安装图解及配置 http://www.soft6.com/v9/2009/jcsj_1030/115821.html 产品密钥,选择“输入产品密钥”,输入:PTT ...

  9. SQL Server ->> GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID

    在我们制作报表的时候常常需要分组聚合.多组聚合和总合.如果通过另外的T-SQL语句来聚合难免性能太差.如果通过报表工具的聚合功能虽说比使用额外的T-SQL语句性能上要好很多,不过不够干脆,还是需要先生 ...

随机推荐

  1. EntityFramework:状态变化与方法的关系[转载]

    原文地址 一.约定 OnModelCreating 有一些限制需要注意,例如: 1.表名不支持使用标签进行标注 2.最小长度在 OnModelCreating 中不支持 3.正则表达式在 OnMode ...

  2. Javascript 基础夯实 —— 使用 webWorker 实现多线程(转)

    原文链接:https://zhuanlan.zhihu.com/p/29219879 当我们开始学习 javascript 的时候,我们就知道 js 其实是单线程的,所以当我们在浏览器中运行某些耗时算 ...

  3. 今天玩了tensorflow playground,太好玩了

    先上地址: http://playground.tensorflow.org 我试了一个最复杂的,螺旋形的.开始怎么训练都不行.后来我多加了几个神经元,居然能训练成功了.真是太牛逼了!

  4. [Java]对字符串中的每一个单词个数进行统计

    这是来自一道电面的题. 单词统计非常easy想到用Map来统计,于是想到了用HashMap. 可是我却没有想到用split来切割单词,想着用遍历字符的方式来推断空格.人家面试官就说了,假设单词之间不止 ...

  5. hdu5389 Zero Escape DP+滚动数组 多校联合第八场

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  6. SVNserver搭建和使用(二)

    上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下怎样使用VisualSVN Server建立版本号库,以及TortoiseSVN的使用. 首先打开V ...

  7. Android上传图片之调用系统拍照和从相冊选择图片

    Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...

  8. java泛型具体解释

    为什么引入泛型 bug是编程的一部分,我们仅仅能尽自己最大的能力降低出现bug的几率,可是谁也不能保证自己写出的程序不出现不论什么问题. 错误可分为两种:编译时错误与执行时错误.编译时错误在编译时能够 ...

  9. ueditor1.4.3在.net环境下的vs开发工具中集成经验

    Ueditor是个非常不错的在线富文本编辑器,几个项目一直使用它.近期想更新版本号.发现新版1.4.3与旧版的部署方式全然不一样了.官网文档介绍的是直接放在iis下的部署说明,没有提到在vs开发工具中 ...

  10. php basic syntax

    php basic syntax PHP(Hypertext Preprocessor,超文本预处理器). 一.PHP入门 1.指令分隔符“分号”         语义分为两种:一种是在程序中使用结构 ...