CUBE 是什么呀,推荐一下这方面的书。
在线等。谢谢!
在线等。谢谢!
解决方案 »
- lucene.net IndexSearcher查不出来数据。大虾们指点下撒。谢谢了。
- 求助,FileUpload控件上传的文件,有些变成只读,不能删除。
- c#中怎样把表与表之间建立关系.
- 关于在ASP.NET中使用正则表达式时遇到的难解之迷,敬请高手指点迷津
- 从数据库读取某一类产品(如100个),绑定到Datalist,想让最前的6个显示图片,其他只显示名称
- 请教UltraWebGrid在UpdatePanel中的问题
- .net难题,高手请指教,急!答者加分!!!!!
- 如何能像csdn论坛一样,可关闭左侧树。
- 如何将动态的地址传给<BGSOUND SRC= "这里" loop=infinite AUTOSTART=TRUE>???
- 如何把本地文件上传到oracle8i中blob字段中,然后显示出来
- 十万火急,我的这个消息框怎显示在服务器上了?我要显示在客户端才对,怎么改?
- C#如何执行事件
其实CUBE和ROLLUP区别不太大,只是在基于GROUP BY 子句创建和汇总分组的可能的组合上有一定差别,CUBE将返回的更多的可能组合。如果在GROUP BY子句中有N个列或者是有N个表达式的话,SQLSERVER在结果集上会返回2的N-1次幂个可能组合。CUBE和ROLLUP之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合
ROLLUP就是将GROUP BY后面的第一列名称求总和,而其他列并不要求
而CUBE则会将每一个列名称都求总和 COPY了一个例子,首先用ROLLUP查询语句:Select cust_id,product_code,sum(qty) as quantityFrom invoices Where cust_id IN (4,5)Group Bycust_id, product_codeWITH RollupOrder By cust_id查询结果:
cust_id product_code quantity
------- -------------- -------
NULL NULL 10
4 5 3
4 6 3
4 NULL 6
5 5 4
5 NULL 4
第一行是4,5买的所有产品的数量
第二行是4买5产品的数量
第三行是4买6产品的数量
第四行是4买所有产品的数量
第五行是5买5产品的数量
第六行是5买所有产品的数量如果查询语句中的ROLLUP关键字更改为CUBE,就会多出有关产品的信息
查询结果:
cust_id product_code quantity
------- -------------- -------
NULL NULL 10
NULL 5 7
NULL 6 3
4 5 3
4 6 3
4 NULL 6
5 5 4
5 NULL 4
第2行是所有顾客买5产品的数量
第3行是所有顾客买6产品的数量
ROLLUP操作的结果集具有类似 COMPUTE BY所返回结果集的功能;然而ROLLUP 具有下列优点:
ROLLUP返回单个结果集;COMPUTE BY返回多个结果集,而多个结果集会增加应用程序代码的复杂性。
ROLLUP可以在服务器游标中使用;COMPUTE BY不可以。
有时,查询优化器为ROLLUP生成的执行计划比为 COMPUTE BY 生成的更为高效。
例如:
Select cust_id,product_code,sum(qty) as quantity
From invoices Where cust_id IN (4,5)
Group By cust_id, product_code
WITH Rollup
Order By cust_id
会出来什么呢?
cust_id product_code quantity
------- -------------- -------
NULL NULL 10
4 5 3
4 6 3
4 NULL 6
5 5 4
5 NULL 4
第一行是4,5买的所有产品的数量
第二行是4买5产品的数量
第三行是4买6产品的数量
第四行是4买所有产品的数量
第五行是5买5产品的数量
第六行是5买所有产品的数量
而用WITH CUBE呢,就会多出来关于产品的信息
cust_id product_code quantity
------- -------------- -------
NULL NULL 10
NULL 5 7
NULL 6 3
4 5 3
4 6 3
4 NULL 6
5 5 4
5 NULL 4
第2行是所有顾客买5产品的数量
第3行是所有顾客买6产品的数量