在sqlserver2012中如何使用分组集

在sqlserver2012中如何使用分组集

ID:34753482

大小:66.24 KB

页数:10页

时间:2019-03-10

在sqlserver2012中如何使用分组集_第1页
在sqlserver2012中如何使用分组集_第2页
在sqlserver2012中如何使用分组集_第3页
在sqlserver2012中如何使用分组集_第4页
在sqlserver2012中如何使用分组集_第5页
资源描述:

《在sqlserver2012中如何使用分组集》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在SQLServer2012中如何使用分组集 分组集就是你据以分组的一个属性集。传统上,SQL中的单个聚合查询定义一个单个分组集。例如,下面的四个查询每个定义了一个单个分组集。 ?123456789101112131415161718192021222324252627SELECTempid,custid,SUM(qty)ASsumqty FROMdbo.Orders GROUPBYempid,custid;   SELECTempid,SUM(qty)ASsumqty FROMdbo.Orders GROUPBYempid;   SELECTcusti

2、d,SUM(qty)ASsumqty FROMdbo.Orders GROUPBYcustid;   SELECTSUM(qty)ASsumqty FROMdbo.Orders;  第一个查询定义了分组集(empid,custid),第二个是(empid),第三个是(custid),最后一个查询定义了空分组集()。此代码返回四个结果集,每个查询一个。 假设不是要四个单独的结果集,而是想要一个统一了四个分组集的所有聚合数据的单个结果集,可以使用UNIONALL集合运算符组合四个查询的结果集,实现此目标。由于集合运算符要求所有结果集需要具有相同列数的兼容架构

3、,你需要调整查询,为缺失的列添加占位符(如NULL标记),类似于下面的代码。 ?123456789101112131415161718192021222324252627282930313233343536SELECTempid,custid,SUM(qty)ASsumqty FROMdbo.Orders GROUPBYempid,custid   UNIONALL   SELECTempid,NULL,SUM(qty)ASsumqty FROMdbo.Orders GROUPBYempid   UNIONALL   SELECTNULL,custid,

4、SUM(qty)ASsumqty FROMdbo.Orders GROUPBYcustid   UNIONALL   373839404142434445464748495051525354555657585960SELECTNULL,NULL,SUM(qty)ASsumqty FROMdbo.Orders; 此代码生成了一个单个结果集,含有被统一的四个分组集的聚合数据。 empidcustidsumqty-------------------------------2A523A201B202B271C343C223D301NULL542NULL793N

5、ULL72NULLA72NULLB47NULLC56NULLD30NULLNULL205(15row(s)affected)  尽管你已经达到了目的,此解决方案具有两个主要问题——代码的长度和性能。此解决方案需要为每个分组集指定一个完整的GROUPBY查询,当有很多分组集时,查询可能会很长。此外,为处理查询,SQLServer将会为每个查询分别扫描源表,效率低下。 SQLServer支持几项遵循标准SQL的功能,能够在同一查询中定义多个分组集,包括GROUPBY子句的GROUPINGSETS、CUBE和ROLLUP从属子句,以及GROUPING和GROU

6、PING_ID函数。 1.GROUPINGSETS从属子句GROUPINGSETS从属子句是一个对GROUPBY子句的强大增强,主要用于报表和数据仓库。通过使用此从属子句,可以在同一查询中定义多个分组集。只需列出你要定义的分组集,在GROUPINGSETS从属子句的括号内以逗号分隔,并且每个分组集列出的成员在其括号内也要以逗号分隔。例如,下面的查询定义四个分组集:(empid,custid)、(empid)、(custid)和()。 ?12345678910111213141516171819SELECTempid,custid,SUM(qty)ASsu

7、mqty FROMdbo.Orders GROUPBY   GROUPINGSETS   (     (empid,custid),     (empid),     (custid),     ()   );  此查询在逻辑上等效于之前统一了四个聚合查询结果集的解决方案,返回相同的输出。不过,此查询相比之前的解决方案有两个主要优势——显然是它要求更少的代码,并且SQLServer会优化扫描源表的次数,而不是必须为每个分组集单独扫描源表。 2.CUBE从属子句GROUPBY子句的CUBE从属子句提供了一种定义多个分组集的简单方式。在CUBE从属子句的括号

8、中,提供了一个以逗号分隔的成员列表后,会得到基于所定义的输入成员的所有可能的分组

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。