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

原文: 【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 结果集:
【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING语句的应用

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

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

你可能感兴趣的:(rollup)