小计和合计报表

简介:
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。下面是 CUBE 和 ROLLUP 之间的具体区别:
  • CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
  • ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
例如,简单表  Inventory 包含下列数据:
Item Color Quantity -------------------- -------------------- -------------------------- Table Blue 124 Table Red 223 Chair Blue 101 Chair Red 210  以下查询将生成小计报表:
 
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL' ELSE ISNULL(Item, 'UNKNOWN') END AS Item, CASE WHEN (GROUPING(Color) = 1) THEN 'ALL' ELSE ISNULL(Color, 'UNKNOWN') END AS Color, SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH ROLLUP Item Color QtySum -------------------- -------------------- -------------------------- Chair Blue 101.00 Chair Red 210.00 Chair ALL 311.00 Table Blue 124.00 Table Red 223.00 Table ALL 347.00 ALL ALL 658.00 (7 row(s) affected)
如果将查询中的  ROLLUP  关键字更改为  CUBE ,那么  CUBE  结果集保持不变,只是在末尾还会返回下列两行:
 
ALL Blue 225.00 ALL Red 433.00
CUBE  操作为  Item  和  Color  中值的可能组合生成行。例如, CUBE  不仅报告  Color  值与  Item  值  Chair Red Blue  
和  Red  +  Blue )的所有可能组合,还报告  Item  值与  Color  值  Red Chair Table  和  Chair  +  Table )的所有可能
组合。 对于  GROUP BY  子句的右列中的每个值, ROLLUP  操作并不报告左列中各值的所有可能组合。
例如, ROLLUP  并不报告每个  Color  值的  Item  值的所有可能组合。 ROLLUP 操作的结果集与 COMPUTE BY 返回的结果集具有类似的功能。然而,ROLLUP 具有下列优点:ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。 ROLLUP 可以在服务器游标中使用,而 COMPUTE BY 则不可以。 有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。

本文转自 august 51CTO博客,原文链接:http://blog.51cto.com/august/6931,如需转载请自行联系原作者
相关文章
|
2月前
|
自然语言处理 算法 前端开发
1484. 按日期分组销售产品
1484. 按日期分组销售产品
21 0
|
数据格式
Layui数据表格templet的数据无法合计
在使用layui数据表格的时候,有一个列是使用templet,依据其他两个列数据计算得到。 在该列开启合计行,一直显示是0 。其他两列数据合计正常。 在社区和百度上寻找过答案,并没有相关介绍。 在解决了该问题后,写下这篇小记录。
278 0
购物车增减商品数量2-修改商品小计3-35
购物车增减商品数量2-修改商品小计3-35
73 0
购物车增减商品数量2-修改商品小计3-35
购物车增减商品数量2-修改商品小计35
购物车增减商品数量2-修改商品小计35
82 0
购物车增减商品数量2-修改商品小计35
购物车增减商品数量2-修改商品小计parents34
购物车增减商品数量2-修改商品小计parents34
73 0
|
JavaScript
jquery购物车增减商品数量2-修改商品小计
jquery购物车增减商品数量2-修改商品小计
93 0
jquery购物车增减商品数量2-修改商品小计

热门文章

最新文章