Tsql统计之一(cube,rollup入门)

sql2005新特性,专为统计而用,直接给个实例吧。

准备数据如下:

 

View Code
create   table  store
(id 
int   identity ( 1 , 1 ),
productid 
int ,
storeid 
char ( 1 ),
num 
int
insert  store(productid,storeid,num)  select   1 , ' A ' , 6
union   all   select   1 , ' B ' , 7
union   all   select   2 , ' A ' , 8
union   all   select   2 , ' B ' , 9

cube,rollup与group up结合使用,两者的区别简单的就是:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合(如按group by a,b,则会产生按a,按b,按a,b组合的多种统计)。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。(如按group by a,b,则只产生按a,b两种统计的).

rollup应用:1)
select productid,storeid,sum(num) as '数量' from store group by productid,storeid with rollup

结果如下:是按照productid进行合计的

2)换下productid,storeid位置

select productid,storeid,sum(num) as '数量'  from store group by storeid,productid with rollup

结果如下:是按照storeid进行合计

cube应用:

select productid,storeid,sum(num) as '数量' from store group by productid,storeid with cube

结果如下:可以看出多了两行

NULL A 14
NULL B 16,除了按productid合计后,也对storeid进行了合计

GROUPING作用:用你需要的 ‘合计','小计’等代替null值 ,但是要数据类型一致(红色部分注意)。
SELECT CASE WHEN (GROUPING(productid) = 1) THEN 1  ELSE ISNULL(productid,0) END AS productid,
CASE WHEN (GROUPING(storeid) = 1) THEN 'ALL'      ELSE ISNULL(storeid, 'UNKNOWN') END AS storeid,
SUM(num) AS num
FROM  store
GROUP BY productid, storeid WITH ROLLUP

Tsql统计之一(cube,rollup入门)

你可能感兴趣的:(rollup)