LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

统计报表(用ROLLUP 汇总数据)

admin
2010年6月27日 17:33 本文热度 6357
[b]作者 :[/b] [url=http://delphibbs.com/keylife/iblog.asp?author=hongyuan][color=#002c99]hongyuan[/color][/url][br][b]标题 :[/b] 统计报表(用rollup 汇总数据) [br][b]关键字:[/b] [br][b]分类 :[/b] [url=http://delphibbs.com/keylife/iblog.asp?author=hongyuan&rid=11148][color=#002c99]sql server 2000[/color][/url] [br][b]密级 :[/b] 私有 [align=right][url=http://delphibbs.com/keylife/iblog_comment.asp?xid=17813&pageno=9999][color=#002c99][/color][/url] [/align] [p]统计报表(用rollup 汇总数据) [br]原贴:[url=http://community.csdn.net/expert/topic/4313/4313978.xml?temp=.691601][color=#002c99]http://community.csdn.net/expert/topic/4313/4313978.xml?temp=.691601[/color][/url][br][br][br]表inventory [br]item color quantity [br]-------------------- -------------------- -------------------------- [br]table blue 124 [br]table red 223 [br]chair blue 101 [br]chair red 210 [br][br]要得到下面结果: [br][br]item color qtysum [br]-------------------- -------------------- -------------------------- [br]chair blue 101.00 [br]chair red 210.00 [br]chair小计 311.00 [br]table blue 124.00 [br]table red 223.00 [br]table小计 347.00 [br]总计 658.00 [br][br][br]---该问题是一个典型的使用rollup生成结合的例子,联机帮助也有相关介绍![br][br][br]-测试环境[br]declare @inventory table (item varchar(20),color varchar(20),quantity money)[br]insert into @inventory select 'table','blue',124[br]insert into @inventory select 'table','red' ,223[br]insert into @inventory select 'chair','blue',101[br]insert into @inventory select 'chair','red' ,210[br][br]--查询[br]select case when (grouping(item) = 1) then '总计'[br] when (grouping(color) = 1) then item+'小计'[br] else isnull(item, 'unknown')[br] end as item,[br] case when (grouping(color) = 1) then ''[br] else isnull(color, 'unknown')[br] end as color,[br] sum(quantity) as qtysum[br]from @inventory[br]group by item, color with rollup[br][br]--结果[br]item color qtysum [br]------------------------ -------------------- --------------------- [br]chair blue 101.0000[br]chair red 210.0000[br]chair小计 311.0000[br]table blue 124.0000[br]table red 223.0000[br]table小计 347.0000[br]总计 658.0000[br][br](所影响的行数为 7 行) [/p][br] [align=right]2005-10-10 9:44:39 [/align] [url=http://delphibbs.com/keylife/iblog_man.asp?xid=17813][color=#002c99]修改笔记[/color][/url] [url=http://delphibbs.com/keylife/iblog_comment.asp?xid=17813][color=#002c99]发表评语»»»[/color][/url] [url=javascript:modifycomment(18073)][color=#002c99]2005-10-10 10:01:01[/color][/url] grouping [p]grouping[br]是一个聚合函数,它产生一个附加的列,当用 cube 或 rollup 运算符添加行时,附加的列输出值为1,当所添加的行不是由 cube 或 rollup 产生时,附加列值为0。[br][br]仅在与包含 cube 或 rollup 运算符的 group by 子句相联系的选择列表中才允许分组。[br][br]语法[br]grouping ( column_name )[br][br]参数[br]column_name[br][br]是 group by 子句中用于检查 cube 或 rollup 空值的列。[br][br]返回类型[br]int[br][br]注释[br]分组用于区分由 cube 和 rollup 返回的空值和标准的空值。作为cube 或 rollup 操作结果返回的 null 是 null 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。 [/p] [align=right] [/align] [url=javascript:modifycomment(18074)][color=#002c99]2005-10-10 10:02:45[/color][/url] 用 rollup 汇总数据 [p]用 rollup 汇总数据[br]在生成包含小计和合计的报表时,rollup 运算符很有用。rollup 运算符生成的结果集类似于 cube 运算符所生成的结果集。有关更多信息,请参见用 cube 汇总数据。 [br][br]cube 和 rollup 之间的区别在于: [br][br]cube 生成的结果集显示了所选列中值的所有组合的聚合。[br][br][br]rollup 生成的结果集显示了所选列中值的某一层次结构的聚合。 [br]例如,简单表 inventory 中包含:[br][br]item color quantity [br]-------------------- -------------------- -------------------------- [br]table blue 124 [br]table red 223 [br]chair blue 101 [br]chair red 210 [br][br]下列查询将生成小计报表:[br][br]select case when (grouping(item) = 1) then 'all'[br] else isnull(item, 'unknown')[br] end as item,[br] case when (grouping(color) = 1) then 'all'[br] else isnull(color, 'unknown')[br] end as color,[br] sum(quantity) as qtysum[br]from inventory[br]group by item, color with rollup[br][br]item color qtysum [br]-------------------- -------------------- -------------------------- [br]chair blue 101.00 [br]chair red 210.00 [br]chair all 311.00 [br]table blue 124.00 [br]table red 223.00 [br]table all 347.00 [br]all all 658.00 [br][br](7 row(s) affected)[br][br]如果查询中的 rollup 关键字更改为 cube,那么 cube 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:[br][br]all blue 225.00 [br]all red 433.00 [br][br]cube 操作为 item 和 color 中值的可能组合生成行。例如,cube 不仅报告与 item 值 chair 相组合的 color 值的所有可能组合(red、blue 和 red + blue),而且报告与 color 值 red 相组合的 item 值的所有可能组合(chair、table 和 chair + table)。[br][br]对于 group by 子句中右边的列中的每个值,rollup 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,rollup 并不对每个 color 值报告 item 值的所有可能组合。[br][br]rollup 操作的结果集具有类似于 compute by 所返回结果集的功能;然而,rollup 具有下列优点: [br][br]rollup 返回单个结果集;compute by 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。[br][br][br]rollup 可以在服务器游标中使用;compute by 不可以。[br][br][br]有时,查询优化器为 rollup 生成的执行计划比为 compute by 生成的更为高效。 [/p]

该文章在 2010/6/27 17:33:22 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved