码迷,mamicode.com
首页 > 数据库 > 详细

【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING语句的应用

时间:2014-12-02 10:09:15      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

原文:【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING语句的应用

CUBE 和 ROLLUP 之间的区别在于:
CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。
CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
GROUPING:
当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

需要注意的是,使用有 WITH ROLLUP 子句的 GROUP BY 语句时,不能再使用 ORDER BY 语句对结果集进行排序,如果对返回的结果顺序不满意,需要应用程序获得结果后在程序中进行排序。
示例:

DECLARE @T TABLE
    (
      名称 VARCHAR(10) ,
      出版商 VARCHAR(10) ,
      价格1 INT ,
      价格2 INT
    )
INSERT  @T
        SELECT  a ,
                北京 ,
                11 ,
                22
        UNION ALL
        SELECT  a ,
                四川 ,
                22 ,
                33
        UNION ALL
        SELECT  b ,
                四川 ,
                12 ,
                23
        UNION ALL
        SELECT  b ,
                北京 ,
                10 ,
                20
        UNION ALL
        SELECT  b ,
                昆明 ,
                20 ,
                30

SELECT  *
FROM    @T       

--WITH CUBE         
SELECT  名称 ,
        出版商 ,
        SUM(价格1) AS 价格1 ,
        SUM(价格2) AS 价格2 ,
        GROUPING(名称) AS CHECK名称 ,
        GROUPING(出版商) AS CHECK出版商
FROM    @T
GROUP BY 名称 ,
        出版商
        WITH CUBE
        
--WITH ROLLUP
SELECT  名称 ,
        出版商 ,
        SUM(价格1) AS 价格1 ,
        SUM(价格2) AS 价格2
FROM    @T
GROUP BY 名称 ,
        出版商
        WITH ROLLUP   
        
--GROUPING        
SELECT  CASE WHEN ( GROUPING(名称) = 1 ) THEN 总计
             ELSE ISNULL(名称, UNKNOWN)
        END AS 名称 ,
        CASE WHEN ( GROUPING(出版商) = 1 ) THEN 小计
             ELSE ISNULL(出版商, UNKNOWN)
        END AS 出版商 ,
        SUM(价格1) AS 价格1 ,
        SUM(价格2) AS 价格2
FROM    @T
GROUP BY 名称 ,
        出版商
        WITH ROLLUP 

WITH CUBE 结果集:
bubuko.com,布布扣

WITH ROLLUP 结果集:
bubuko.com,布布扣

GROUPING结果集:
bubuko.com,布布扣

【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING语句的应用

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/lonelyxmas/p/4136582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!