Rollup 和 Cube 的学习心得

来源:互联网 发布:小白的第一本书python 编辑:程序博客网 时间:2024/05/16 12:58

关于Rollup 和 Cube的文章,网络上有很多,只要输入关键字随便到哪个搜索引擎都可以搜到大量的相关文章。

比如这样几篇文章就不错:

http://industry.ccidnet.com/pub/article/c1105_a79297_p1.html
http://linux.ccidnet.com/pub/article/c322_a79386_p1.html
http://www.cnblogs.com/sunsonbaby/archive/2004/09/29/47876.html

使用方法:

一般用在group by 语句中,在sql server中用法是:group by ??? with rollup | cube ,在oracle中的用法是 group by rollup | cube(????)

虽然写法不一样,但是功能都是一样的,

rollup会根据分组情况分别添加小计和总计记录。

例子:

 <%
 
Set Db = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
mmm="driver={SQL Server};server=192.1.1.21;uid=sa;pwd=;database=gwjp2"
db.Provider="MSDataShape"
db.Open mmm
 
 
 Dim CommandText
     CommandText  = "Select CASE WHEN (Grouping(dwname)=1) THEN '总计' ELSE dwname END AS dwName, "
     CommandText  = CommandText & " CASE WHEN (Grouping(gwName)=1) THEN '小计' ELSE gwname END AS gwName,"
     CommandText  = CommandText &  " count(*) as count,"
     CommandText  = CommandText &  " Sum(gwlevel) as gwlevel"
     CommandText  = CommandText &  " from tzl"
     CommandText  = CommandText &  " Group By dwname,gwname WITH rollup "

Response.write CommandText

Response.Write "<hr>"

rs.Open commandtext,db,3,1

Response.Write rs.RecordCount
Response.write "<table>"
Response.Write "<tr>"
for i=0 to rs.Fields.count-1
   Response.Write "<td>" & rs.Fields(i).Name & "</td>"
next
Response.Write "</tr>"
do while not rs.EOF
Response.Write "<tr>"
   for i=0 to rs.Fields.count-1
      Response.Write "<td>" 
      Response.Write rs(i)        
      Response.Write "</td>"
   next
   Response.Write "</tr>"
   rs.MoveNext
loop
Response.Write "</table>"
%>

结果为:

dwName                  gwName      count  gwlevel

xx公司  生产制造部 环境检测化验A 1 13
xx公司  生产制造部 环境检测化验B 1 13
xx公司  生产制造部 绿化技术管理A 1 39
xx公司  生产制造部 绿化技术管理B 1 39
xx公司  生产制造部 生产调度L 1 35
xx公司  生产制造部 总值班调度D 1 35
xx公司  生产制造部 小计 6 174
xx公司  市场一部 管库 1 14
xx公司  市场一部 清扫 1 9
xx公司  市场一部 售后服务站主任H 1 45
xx公司  市场一部 现场技术诊断D 1 40
xx公司  市场一部 现场技术诊断G 1 37
xx公司  市场一部 小计 5 145
xx公司  资产运营部 能源监察与仲裁 1 39
xx公司  资产运营部 能源外购与外联 1 39
xx公司  资产运营部 巡守员 1 9
xx公司  资产运营部 资产管理A 1 41
xx公司  资产运营部 小计 4 128
xx公司  综合保障部 地变看车点警卫B 1 15
xx公司  综合保障部 东门警卫F-I 4 68
xx公司  综合保障部 后勤服务B 1 9
xx公司  综合保障部 南门警卫G-I 2 34
xx公司  综合保障部 南外门警卫 1 14
xx公司  综合保障部 物资门警卫I 1 18
xx公司  综合保障部 西门警卫H,I 2 36
xx公司  综合保障部 专用线门警卫B-D 3 42
xx公司  综合保障部 小计 15 236
品质保证部  计量处 库房管理 1 15
品质保证部  计量处 小计 1 15
品质保证部  质量管理处 机电配件检验C 1 26
品质保证部  质量管理处 外协件检验B 1 26
品质保证部  质量管理处 质量体系 1 41
品质保证部  质量管理处 小计 3 93
企业管理部  信息中心 应用软件开发J 1 41
企业管理部  信息中心 小计 1 41
研发中心  城轨客车开发部 打字复印C 1 9
研发中心  城轨客车开发部 小计 1 9
研发中心  档案馆 复印工 1 16
研发中心  档案馆 晒图工C-J 1 18
研发中心  档案馆 巡守员B 1 9
研发中心  档案馆 小计 3 43
总计 小计 39 884

如果将上一例子中的rollup改成cube的话,结果会非常复杂。

结果如下:

dwName                  gwName      count  gwlevel

xx公司  生产制造部 环境检测化验A 1 13
xx公司  生产制造部 环境检测化验B 1 13
xx公司  生产制造部 绿化技术管理A 1 39
xx公司  生产制造部 绿化技术管理B 1 39
xx公司  生产制造部 生产调度L 1 35
xx公司  生产制造部 总值班调度D 1 35
xx公司  生产制造部 小计 6 174
xx公司  市场一部 管库 1 14
xx公司  市场一部 清扫 1 9
xx公司  市场一部 售后服务站主任H 1 45
xx公司  市场一部 现场技术诊断D 1 40
xx公司  市场一部 现场技术诊断G 1 37
xx公司  市场一部 小计 5 145
xx公司  资产运营部 能源监察与仲裁 1 39
xx公司  资产运营部 能源外购与外联 1 39
xx公司  资产运营部 巡守员 1 9
xx公司  资产运营部 资产管理A 1 41
xx公司  资产运营部 小计 4 128
xx公司  综合保障部 地变看车点警卫B 1 15
xx公司  综合保障部 东门警卫F-I 4 68
xx公司  综合保障部 后勤服务B 1 9
xx公司  综合保障部 南门警卫G-I 2 34
xx公司  综合保障部 南外门警卫 1 14
xx公司  综合保障部 物资门警卫I 1 18
xx公司  综合保障部 西门警卫H,I 2 36
xx公司  综合保障部 专用线门警卫B-D 3 42
xx公司  综合保障部 小计 15 236
品质保证部  计量处 库房管理 1 15
品质保证部  计量处 小计 1 15
品质保证部  质量管理处 机电配件检验C 1 26
品质保证部  质量管理处 外协件检验B 1 26
品质保证部  质量管理处 质量体系 1 41
品质保证部  质量管理处 小计 3 93
企业管理部  信息中心 应用软件开发J 1 41
企业管理部  信息中心 小计 1 41
研发中心  城轨客车开发部 打字复印C 1 9
研发中心  城轨客车开发部 小计 1 9
研发中心  档案馆 复印工 1 16
研发中心  档案馆 晒图工C-J 1 18
研发中心  档案馆 巡守员B 1 9
研发中心  档案馆 小计 3 43
总计 小计 39 884

总计 打字复印C 1 9
总计 地变看车点警卫B 1 15
总计 东门警卫F-I 4 68
总计 复印工 1 16
总计 管库 1 14
总计 后勤服务B 1 9
总计 环境检测化验A 1 13
总计 环境检测化验B 1 13
总计 机电配件检验C 1 26
总计 库房管理 1 15
总计 绿化技术管理A 1 39
总计 绿化技术管理B 1 39
总计 南门警卫G-I 2 34
总计 南外门警卫 1 14
总计 能源监察与仲裁 1 39
总计 能源外购与外联 1 39
总计 清扫 1 9
总计 晒图工C-J 1 18
总计 生产调度L 1 35
总计 售后服务站主任H 1 45
总计 外协件检验B 1 26
总计 物资门警卫I 1 18
总计 西门警卫H,I 2 36
总计 现场技术诊断D 1 40
总计 现场技术诊断G 1 37
总计 巡守员 1 9
总计 巡守员B 1 9
总计 应用软件开发J 1 41
总计 质量体系 1 41
总计 专用线门警卫B-D 3 42
总计 资产管理A 1 41
总计 总值班调度D 1 35

可见,用了cube后的结果比原来的多,多出来的正好是后面粉色的部分。正好是正常分组情况下的输出。本例用的两极分组,如果多极的情况下,用了cube,结果会更加复杂。因为它产生的是一个多维数据集。

本文没有对rollup 和 cube的概念和原理进行深入的探讨和分析,只给出一例,以使我们能尽快地得到感性认识。具体应用要根据我们的具体需求,查阅相关资料。

原创粉丝点击