用ROLLUP进行分类数据统计(一)

通常,我们在写web应用程序中,会经常用到分类数据统计的功能。在一个电子商务网站中,我们往往对销售的每类商品的销售额,销售的数量要进行分类统计。那么,在asp.net中,我们如何用datagrid,一方面显示数据库中的数据,一方面又能按类别对数据进行分类统计呢?方法应该有很多种,但在这里,想介绍一种容易被人遗忘的方法,那就是使用MS SQL SERVER中的roll up语句了。

让我们先来介绍下ms sql server中的roll up语句。Roll up语句,在对统计的数据既要进行分类求和,又要求其总和时,是十分有用的。Roll up语句必须配合group by使用,举个例子,比如在northwind数据库中,为了返回同一目录下的产品总价格,和库存量,可以使用如下sql 语句:

SELECT
   CategoryName, 
   SUM(UnitPrice) as UnitPrice, 
   SUM(UnitsinStock) as UnitsinStock 
FROM Products
  INNER JOIN Categories On
  Products.CategoryID = Categories.CategoryID
GROUP BY CategoryName


返回的结果如下


而如果想既列出分类中所有产品,又能分类统计出每个分类的产品,价格统计总数,那么roll up就大有用武之地了。我们想达到的效果可以用下图表示:


请注意上表中黄色的部分,比如,


表示meat/poultry这个分类中的产品总价格和数量,这就达到了分类统计的目的,最后一行


表示所有分类中产品的总价格和总的数量。可以看出,roll up的实质就是按列,既对分类求和又求所有分类的总和,但要注意一点,roll up在做分类统计时,会在某些字段插入空值,比如,在


中,rollup在做分类统计时,首先是会以下面的形式出现


那么如何将这些null值替换掉呢,可以使用下面的语句:

SELECT
 CASE
  WHEN (Grouping(CategoryName)=1) THEN 'MainTotal'
  ELSE CategoryName
 END AS CategoryName,
 CASE
  WHEN (Grouping(ProductName)=1) THEN 'SubTotal'
  ELSE Productname
 END AS ProductName, 
 Sum(UnitPrice) as UnitPrice, 
 Sum(UnitsinStock) as UnitsInStock 
FROM Products
 INNER JOIN Categories On
    Products.CategoryID = Categories.CategoryID
GROUP BY CategoryName, ProductName WITH ROLLUP


其中,使用case when..else 的语句时,当productname一列中遇到有null值时,用"subtotal"来代替,当categoryname一列中遇到有null值时,用"maintotal"值来代替。

时间: 2024-10-28 18:19:25

用ROLLUP进行分类数据统计(一)的相关文章

用ROLLUP进行分类数据统计(二)

我们介绍了ms sql server中的roll up语句.下面开始介绍如何用datagrid结合rollup语句来进行分类统计. 我们要达到的效果是这样的: 首先,应先将数据库中的产品数据按照所属的不同的目录列举出来,这其中要用到一些技巧.这里先用SQL语句,从数据库读取product表的数据,之后放到dataset的默认datatable中去,然后检查每一个产品所属的类别,如果发现某一个产品的类别和前一条记录中产品所属的类别不一样的话,那么就可以肯定当前产品是属于一个新的分类了,就可以插入新

用户研究:有效问卷的数据统计

文章描述:用户问卷调查是一个比较常用的用研方法.方法本身有着一定的科学性,这个毋庸置疑.只是我们在审视或挖掘问卷结果时,尤其是用户的对于某个对象或事物的态度时,希望和其他客观数据结合,如:产品运营数据等.这样,我们得到的结论也许能够更接近于用户的真实情况.   大家是否对用户问卷的结果有过困惑.通过简单的问卷调查,我们无法根据用户对产品的态度结果去准确地预测用户如果在真实环境中的行为. 我们先来看一个案例: 当 Sony 引入 Boom Box 概念的时候,他们召集了一些潜在的消费者,组成焦点小

巧用ASP实现Web数据统计、报表和打印

web|打印|数据|统计 摘 要:本文阐述一种利用ASP实现Web数据统计.报表的基本思路和实现方法,同时提供一种巧妙调用Word打印报表的解决方案. 关键词: ASP,数据统计,报表,打印,Word 1. 引言 随着Internet的飞速发展,基于Web开发的业务应用系统越来越多,如办公自动化.电子商务和管理信息系统(MIS)等.这些Web业务应用系统经常涉及到数据的统计.报表和打印.ASP在实施动态交互和生成动态页面方面具有很大的优势,但在处理复杂数据统计.报表和打印时却遇到不小的麻烦.本文

菜鸟和老鸟都要做好的SEO数据统计

默爱学习SEO也有几个月了,在这几个月中,自己的学习历程算是非常艰苦的,不过黄天不负有心人,自己的技术还是有所增进的,并且有自己的研究心得,当然这其中还是谢谢A5的SEO经理唐世军帮助我解决在学习中遇到的问题,废话就不多说了,分享一下自己是如何数据统计的. A 网站内部数据分析表 网站的内部数据分析是非常有必要的,每天记录的内容数量也是非常庞大的,那么下面我们就分为3个内容吧 1 今日收录 每天睡觉一醒来,我们seoer都是点击站长工具,查询自己的网站被搜索引擎收录的情况,当然收录的情况不是看看

HBase在数据统计应用中的使用总结

1. 数据统计的需求 互联网上对于数据的统计,一个重要的应用就是对网站站点数据的统计,例如CNZZ站长统计.百度统计.Google Analytics.量子恒道统计等等. 网站站点统计工具无外乎有以下一些功能: 1)网站流量统计:包括PV.UV.IP等指标,这些统计指标可以以趋势图的形式展示出来,如最近一周.最近一个月等. 2)IP来源信息统计:记录各个来源IP下的访问PV数. 3)访问来源分析:记录访客是从哪些途径到达本网站的. 4)搜索引擎及搜索关键词分析:对于各个指定搜索引擎带来访问PV的

Excel中数据透视图在教师课时数据统计中的应用

  Excel中数据透视图在教师课时数据统计中的应用           1.用Ecxel2013打开文件"课时统计表".xlsx,打开界面如下: 2.在统计的任意区域中选择任意单元格,单击菜单"插入→数据透视图",选择"数据透视图",打开"创建数据透视图"对话框,如图: 3.在弹出的对话框中,默认选中了原始数据的整个区域,确认分析的数据的区域为整个工作表,选择放置数据透视图的位置为"新工作表:单击"确定&

搞定 EXCEL数据统计错误信息

  最近帮一位同事用EXCEL将其班学生的各科成绩处理完毕后,通过打印机输出时有几名学生的总分处输出为"#VALUE!"(如图1),很不美观.天空软件站告诉大家这是因为这几名学生由于各种原因缺少某科成绩,用公式求总分时造成对应总分处显示"#VALUE!"的错误信息.通过笔者的摸索发现利用 EXCEL的"错误单元格的打印"操作完全可避免上述问题. 具体操作为:单击"文件→页面设置"命令,在出现的对话框中单击"工作表&q

EXCEL数据统计错误信息解决图文教程

  最近帮一位童鞋用EXCEL将其班学生的各科成绩处理完毕后,通过打印机输出时有几名学生的总分处输出为"#VALUE!"(如图1),很不美观.西西告诉大家这是因为这几名学生由于各种原因缺少某科成绩,用公式求总分时造成对应总分处显示"#VALUE!"的错误信息.通过小编的摸索发现利用 EXCEL的"错误单元格的打印"操作完全可避免上述问题. 具体操作为:单击"文件→页面设置"命令,在出现的对话框中单击"工作表"

对已知进行数据统计与分析

问题描述 对已知进行数据统计与分析 图中最左是1到9的随机数,顺序是从上往下a然后b,规则是以A为例当随机数从第一个不是A中数起到为A中的数结束,进行个数统计,如图表中统计A为例连续14个不是A中的数,记为15,连续出现A中数时不记,以此类推进行统计BCDEF. 解决方案 图呢? 解决方案二: 我图传不上