欢迎光临

木子屋

标题: SQL Server2000：ROLLUP和CUBE运算符使用

作者: dnawo

日期: 2010-04-16 07:03 PM

分类: 服务器

内容: ROLLUP、CUBE运算符和GROUP BY一起使用能在结果集中加入一些额外的统计信息，例如有一张OrderDetail表，结构和数据如下：
例1：统计每个订单的产品数量。
复制内容到剪贴板 程序代码select orderid,sum(quantity) as quantity from orderDetail
group by orderid
with rollup
结果集：
如图所示，ROLLUP统计出了所有订单的产品数。
例2：统计每个订单、每种产品的数量。
复制内容到剪贴板 程序代码select orderid,productid,sum(quantity) as quantity from orderDetail
group by orderid,productid
with rollup
结果集：
如图所示，ROLLUP统计出了每笔订单的产品数以及所有订单的产品数。
例3：统计每个订单、每种产品的金额。
复制内容到剪贴板 程序代码select orderid,productid,quantity,sum(price*quantity) as total from orderDetail
group by orderid,productid,quantity
with rollup
结果集：
如图所示，ROLLUP统计出了每笔订单的金额以及所有订单的金额。
例4：当GROUP BY后边有多个字段时，字段的前后顺序不同，结果就会不同，用例2做测试。
复制内容到剪贴板 程序代码select orderid,productid,sum(quantity) as quantity from orderDetail
group by productid,orderid
with rollup
结果集：
小结
·ROLLUP得紧跟在GROUP BY后边使用；
·GROUP BY后边字段的前后顺序影响ROLLUP的结果；
·ROLLUP将GROUP BY后边字段从右到左依次为NULL再汇总其他聚合列的值；
例5：再以例2为例，CUBE运算符结果为例2和例4结果集的并集。
复制内容到剪贴板 程序代码select orderid,productid,sum(quantity) as quantity from orderDetail
group by orderid,productid
with cube
结果集：
小结
·和ROLLUP运算符不同的是CUBE运算符不受GROUP BY后边字段的前后顺序的影响，CUBE运算符将GROUP BY后边字段排列组合设置为NULL再汇总其他聚合列的值；
GROUPING函数
GROUPING函数可以判断列的值是否是ROLLUP、CUBE运算符生成的，若则则函数值为1，否则为0。再来看一个例子：
复制内容到剪贴板 程序代码select orderid,grouping(orderid) as g1,productid,grouping(productid) as g2,sum(quantity) as quantity from orderDetail
group by orderid,productid
with rollup
结果集：

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.609 ms

返回

标题: SQL Server2000：ROLLUP和CUBE运算符使用

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.609 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.625 ms

返回