第一次看到这样的SQL语句时,您无法理解它,它使用了以下一些不常用的语句。
聚合
功能:分组
汇总数据
操作:汇总
选择
病例分组(o.customerid)当0 o.customerid别人(总)结束
AllCustomersSummary,
病例分组(OD。OrderId)当0 od.orderid其他1端
IndividualCustomerSummary,
和(OD。数量*单价价格法。)
从订单O,{订单
详细信息}
在今年(o.orderdate)= 1998行= o.orderid OD。
集团通过o.customerid,od.orderid与汇总
为了allcustomerssummary
看看SQL Server的帮助,人们
发现,有这么一件了不起的事情是令人惊奇的。在编写水晶报表之前,它可以在SQL Server中实现这些功能。
1。用立方体汇总数据
结果集的CUBE
运算符生成的是一个多维数据集的多维数据集是数据的一种延伸,和事实数据的数据记录个人事件。
扩展都是建立在
用户试图分析列,这些列称为维度,多维数据集是一组结果包含每个维度交叉表的所有可能的组合。
CUBE运算符由SELECT语句子句中指定的组。这个语句选择列表应包含维度列和聚合
函数的expression.group应指定维度列和立方体的关键词,结果集将包含维度列中各值的所有可能组合,和总价值在这些维度值组合相匹配的基准线。
例如,一个简单的表
目录包含:
产品颜色蓝色------------------------------------------------------------------量表124表223椅子101把椅子红蓝红210
下面的
查询返回结果集将包含所有可能的数量组合:项目和颜色:
选择项目、颜色、金额(数量)为qtysumfrom inventorygroup项,颜色
下面是结果集:
产品颜色qtysum椅子椅子椅子蓝------------------------------------------------------------------ 101红210(空)311表124表223表红蓝(零)347(零)(零)658(零)225(零)红433蓝
我们的论文着重于以下几行:
主席(空)311
所有行的小计
报告项目维度的椅子的值。NULL值返回到颜色维度,表示行报告的聚合包括颜色维度任意值的行。
表(NULL)347
此行类似,但报告是项目维度表中值的所有行的小计。
(NULL)(空)658
该行报告多维数据集的总数。该项和颜色维度的值均为NULL,表示两个维度中的所有值都聚集在行中。
(空)蓝色225(空)红色433
这两行报告:颜色维度。两行中的项维度值都为null,表示来自项维度的聚合数据是任意值的行。
使用分组来区分空值
多维数据集操作生成的空值带来了一个问题:如何区分多维数据集操作生成的空值和从实际数据返回的null值这个问题可以通过分组功能
解决。如果列中的值是从事实数据,分组函数返回0;如果列中的值是零的立方体操作生成的,则返回1。在立方体的操作,生成的零代表整个价值。SELECT语句可以被写使用GROUPING函数
替换成一个字符串生成空的。因为在事实数据零表示数据值是未知的,SELECT语句也可以解码返回字符串而不是空从未知事实的数据。例如:
选择案例时(分组(项目)= 1)then'all'else isnull(项目,'unknown)作为项目结束时(分组(颜色)= 1)then'all'else isnull(颜色,'unknown)端颜色笔(数量)为qtysumfrom inventorygroup项目,彩色立方体
多维数据集
多维数据集运算符可以用来生成多维数据的多维数据集,也就是多维数据集,它具有任意数量的维度:
选择案例时(分组(项目)= 1)then'all'else isnull(项目,'unknown '),项目,和(())
SELECT语句返回一个结果集,
显示在每个值中:item,item也显示所有的值:
项目qtysum椅子311表347 658 ----------------------------------------------
包含多维数据集多维数据集的SELECT语句可以生成大的结果集,这些结果集将生成所有中值组合的行。这些大的结果集可能包含太多的数据,这些数据不便于阅读和理解:
创建视图时invcube asselect(分组(项目)= 1)then'all'else isnull(项目,'unknown)作为项目结束时(分组(颜色)= 1)then'all'else isnull(颜色,'unknown)端颜色笔(数量)为qtysumfrom inventorygroup项目,彩色立方体
然后,您可以使用视图只查询您感兴趣的维度的值:
SELECT * FROM invcubewhere项目and'all'item颜色= 'chair'color = qtysum椅311 ------------------------------------------------------------------(1行(S)的
影响)
2。总结和汇总数据
在生成包含小计和合计报表,ROLLUP运算符是有用的。结果集由ROLLUP运算符生成的结果集类似于CUBE运算符生成的更多信息。
CUBE和ROLLUP的
区别在于:
多维数据集生成的结果集显示了所选列中所有值组合的集合。
结果集的汇总生成显示一个层次结构中的所选列中值的聚集。
例如,简单表清单包含:
产品颜色蓝色------------------------------------------------------------------量表124表223椅子101把椅子红蓝红210
下面的查询将生成报表的
分类汇总:
选择案例时(分组(项目)= 1)then'all'else isnull(项目,'unknown)作为项目结束时(分组(颜色)= 1)then'all'else isnull(颜色,'unknown)端颜色笔(数量)为qtysumfrom inventorygroup的项目,与rollupitem颜色qtysum椅子椅子------------------------------------------------------------------蓝101红210表124表311椅子都蓝红223表347所有658个颜色(7行(S)的影响)
如果查询中的ROLLUP关键字更改为立方体,立方体的结果集,然后如上结果相同,但它将返回以下两行在结果集的最后。
全蓝225全红433
多维数据集操作是一个可能的项目和颜色的中间组合,以生成行。例如,多维数据集不仅报告与项目值椅子(红色、蓝色和红色+蓝色)相结合的所有可能的颜色值组合,还报告所有可能的项目值组合,并与颜色值红色(红色、蓝色和++)相结合。
每个值的条款的组的右列,ROLLUP操作不报告的左栏中的所有可能的组合(或左栏)。例如,汇总不报告所有可能的组合项的值为每个颜色值。
套ROLLUP操作的结果有相似的函数的结果集返回计算的;然而,汇总有以下优点:
ROLLUP返回单个结果集;计算返回多个结果集,和多个结果集增加
应用程序代码的复杂性。
汇总可用于
服务器游标;计算不可用。
有时,由查询
优化器为汇总
执行计划的效率更高,产生的计算。
3.grouping
它是一个聚合函数,它生成一个额外的列。当添加与CUBE或ROLLUP运算符的行,额外的列输出值为1。当
连续增加不是由CUBE或ROLLUP生成的,额外的列值为0。
分组是只有在含有CUBE或ROLLUP运算符条款组
关联的选择列表允许。
语法
分组(column_name)
参数 column_name
这是一个使用GROUP BY子句
检查CUBE或ROLLUP空值的列。
返回
类型 int
笔记 组是用来区分空值和标准值为空的CUBE和ROLLUP返回。空返回由于CUBE或ROLLUP操作是无效的一种特殊应用。它是在结果集的列的占位符,意义。
样品
下面的示例将版税的数值分组并聚合了预付值。
使用pubsselect版税总和(提前),综合推进,分组(皇室)'grp称号
结果集显示两个空值下的版税。第一个空表示从本表中的列得到的空值组。第二空在集合线添加到汇总操作。汇款行显示所有版税组提前总价值等同于1的玻璃钢柱。
下面是结果集:
特许权使用费总额预付GRP ---------------------------------零1057000.0000012 2275.0000014 4000.0000016 7000.0000024 25125 95400.00001空
3.grouping
它是一个聚合函数,它生成一个额外的列。当添加与CUBE或ROLLUP运算符的行,额外的列输出值为1。当连续增加不是由CUBE或ROLLUP生成的,额外的列值为0。
分组是只有在含有CUBE或ROLLUP运算符条款组关联的选择列表允许。
语法
分组(column_name)
参数
column_name
这是一个使用GROUP BY子句检查CUBE或ROLLUP空值的列。
返回类型
int
笔记
组是用来区分空值和标准值为空的CUBE和ROLLUP返回。空返回由于CUBE或ROLLUP操作是无效的一种特殊应用。它是在结果集的列的占位符,意义。
样品
下面的示例将版税的数值分组并聚合了预付值。
使用pubsselect版税总和(提前),综合推进,分组(皇室)'grp称号
结果集显示两个空值下的版税。第一个空表示从本表中的列得到的空值组。第二空在集合线添加到汇总操作。汇款行显示所有版税组提前总价值等同于1的玻璃钢柱。
下面是结果集:
特许权使用费总额预付GRP ---------------------------------零1057000.0000012 2275.0000014 4000.0000016 7000.0000024 25125 95400.00001空
3.grouping
它是一个聚合函数,它生成一个额外的列。当添加与CUBE或ROLLUP运算符的行,额外的列输出值为1。当连续增加不是由CUBE或ROLLUP生成的,额外的列值为0。
分组是只有在含有CUBE或ROLLUP运算符条款组关联的选择列表允许。
语法
分组(column_name)
参数
column_name
这是一个使用GROUP BY子句检查CUBE或ROLLUP空值的列。
返回类型
int
笔记
组是用来区分空值和标准值为空的CUBE和ROLLUP返回。空返回由于CUBE或ROLLUP操作是无效的一种特殊应用。它是在结果集的列的占位符,意义。
样品
下面的示例将版税的数值分组并聚合了预付值。
使用pubsselect版税总和(提前),综合推进,分组(皇室)'grp称号
结果集显示两个空值下的版税。第一个空表示从本表中的列得到的空值组。第二空在集合线添加到汇总操作。汇款行显示所有版税组提前总价值等同于1的玻璃钢柱。
下面是结果集:
特许权使用费总额预付GRP ---------------------------------零1057000.0000012 2275.0000014 4000.0000016 7000.0000024 25125 95400.00001空
分组,汇总
介绍,和立方体来自SQL Server2000
中文版的帮助。