CUBE 是什么呀,推荐一下这方面的书。
在线等。谢谢!

解决方案 »

  1.   

    要使用CUBE,首先要了解GROUP BY。
    其实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 生成的更为高效。
      

  2.   

    如果想总结一下查询出来的数据,可以用CUBE和ROLLUP
    例如:
    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产品的数量
      

  3.   

    都是SQL的后续扩展或者同期产物
      

  4.   

    在问下CUBE和EXCEL能联合试用吗?