sql中 with rollup 、with cube、grouping 统计函数用法

SQL code
   
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> with rollup 、 with cube、 grouping CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 grouping : 当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。 -- 例如 DECLARE @T TABLE (名称 VARCHAR ( 1 ) , 出版商 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 名称, 出版商, SUM (价格1) AS 价格1, SUM (价格2) AS 价格2, GROUPING (名称) AS CHECK名称, GROUPING (出版商) AS CHECK出版商 FROM @T GROUP BY 名称,出版商 WITH CUBE /* 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a 北京 11 22 0 0 a 四川 22 33 0 0 a NULL 33 55 0 1 b 北京 10 20 0 0 b 昆明 20 30 0 0 b 四川 12 23 0 0 b NULL 42 73 0 1 NULL NULL 75 128 1 1 NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 (所影响的行数为 11 行) */ -- 分析 /* group by 两列:名称有两个类别A,B;所有由CUBE运算而生成行的是 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a NULL 33 55 0 1 b NULL 42 73 0 1 出版商有三个类别,所有由CUBE运算而生成行的是 名称 出版商 价格1 价格2 CHECK名称 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 以及 NULL NULL 75 128 1 1 */ SELECT 名称, 出版商, SUM (价格1) AS 价格1, SUM (价格2) AS 价格2 FROM @T GROUP BY 名称,出版商 WITH ROLLUP /* 名称 出版商 价格1 价格2 ---- ---------- ----------- ----------- a 北京 11 22 a 四川 22 33 a NULL 33 55 b 北京 10 20 b 昆明 20 30 b 四川 12 23 b NULL 42 73 NULL NULL 75 128 */

你可能感兴趣的:(sql,出版)