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

posted on 2011-04-17 01:55  cnby  阅读(578)  评论(0编辑  收藏  举报