【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPIN

系统 2408 0

原文:    【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 结果集:
张军博客  

WITH ROLLUP 结果集:
张军博客  

GROUPING结果集:
张军博客  

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论