实现数据分类汇总的SQL语句

本文详细解析了SQL中的ROLLUP和CUBE运算符,通过具体实例展示了如何使用这两个运算符来生成包含小计和总计的报表,以及它们在处理多维数据集时的区别。

 

None.gif 现有表Test,内容如下: 
None.gifID   Catalog    Num 
None.gif
1           A             3  
None.gif
1           B             5
None.gif
2           A             8  
None.gif
2           B             2
None.gif 
None.gif现在想按ID查询出这种结果: 
None.gif
-- ------------------ 
None.gif
1           A            3
None.gif
1           B            5  
None.gif汇总小计:         
8
None.gif
2           A            8  
None.gif
2           B            2  
None.gif汇总小计:        
10  
None.gif 
None.gif问:该如何实现?
None.gif
None.gif在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。 
None.gif======================== 
None.gifCUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。 
None.gif 
None.gifCUBE 运算符在 
SELECT  语句的  GROUP   BY  子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。 GROUP   BY  应指定维度列和关键字  WITH  CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。 
None.gif=========================  
None.gif 
None.gifCUBE 和 ROLLUP 之间的区别在于:  
None.gif 
None.gifCUBE 生成的结果集显示了所选列中值的所有组合的聚合。 
None.gif 
None.gifROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 
None.gif
None.gifThe ROLLUP operator 
is  useful  in  generating reports that contain subtotals  and  totals. The ROLLUP operator generates a result  set  that  is  similar  to  the result sets generated  by  the CUBE operator.
None.gif
None.gifThe differences 
between  CUBE  and  ROLLUP are: 
None.gif
None.gifCUBE generates a result 
set  showing aggregates  for   all  combinations  of   values   in  the selected columns.
None.gifROLLUP generates a result 
set  showing aggregates  for  a hierarchy  of   values   in  the selected columns. 
None.gif最后查询语句如下:
None.gif
None.gif
SELECT   CASE   WHEN  ( GROUPING (ID)  =   1 THEN   ' ALL '  
None.gif            
ELSE   ISNULL (ID,  ' UNKNOWN '
None.gif       
END   AS  ID, 
None.gif       
CASE   WHEN  ( GROUPING (Catalog)  =   1 THEN   ' ALL '  
None.gif            
ELSE   ISNULL (Catalog,  ' UNKNOWN '
None.gif       
END   AS  Catalog, 
None.gif       
SUM (Num)  AS  Num 
None.gif
FROM  Test 
None.gif
GROUP   BY  ID, Catalog  WITH  ROLLUP 

 

转载于:https://www.cnblogs.com/Dicky/archive/2005/03/12/122581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值