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

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

准备数据如下:

 

ExpandedBlockStart.gif 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

转载于:https://www.cnblogs.com/gaiyang/archive/2011/04/17/2018636.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值