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

我们介绍了ms sql server中的roll up语句。下面开始介绍如何用datagrid结合rollup语句来进行分类统计。

我们要达到的效果是这样的:

首先,应先将数据库中的产品数据按照所属的不同的目录列举出来,这其中要用到一些技巧.这里先用SQL语句,从数据库读取product表的数据,之后放到dataset的默认datatable中去,然后检查每一个产品所属的类别,如果发现某一个产品的类别和前一条记录中产品所属的类别不一样的话,那么就可以肯定当前产品是属于一个新的分类了,就可以插入新的行,并且加以修饰,成为分类标题,同时将roll up的统计结果显示在相应的位置就可以了。我们先来看page_load部分的代码

Sub Page_Load(Sender As Object, E As EventArgs) Handles MyBase.Load
  ' TODO: Update the ConnectionString and CommandText values for your application
dim ConnectionString as string = "server=localhost;database=northwind;UID=sa"
  Dim CommandText As String = "Select CASE WHEN (Grouping(CategoryName)=1) THEN " & _
       "'MainTotal' ELSE categoryname END AS CategoryName, "
  CommandText &= " CASE WHEN (Grouping(ProductName)=1) THEN 'SubTotal' ELSE " & _
       "Productname END AS ProductName,"
  CommandText &= " Sum(UnitPrice) as unitprice, "
  CommandText &= " Sum(UnitsinStock) as UnitsinStock "
  CommandText &= " from Products INNER JOIN Categories On Products.categoryID = " & _
          " Categories.CategoryID"
  CommandText &= " Group By Categoryname, ProductName WITh ROLLUP "
  Dim myConnection As New SqlConnection(ConnectionString)
  Dim myCommand As New SqlDataAdapter(CommandText, myConnection)
  Dim ds As New DataSet
  myCommand.Fill(ds)
  Dim curCat As String ‘指示当前记录中产品所属的类别
  Dim prevCat As String ‘指示上一条记录中产品所属的类别
  Dim i As Integer = 0  ‘要插入分类标题行的位置,用I表示
'遍历结果集,找出要插入分类标题的行
  Do While i <= ds.Tables(0).Rows.Count - 1
    curCat = ds.Tables(0).Rows(i).Item(0)
    If curCat <> prevCat Then ‘如果发现前后两记录的所属类别不一样
      prevCat = curCat
      Dim shRow As DataRow = ds.Tables(0).NewRow
      shRow(1) = ds.Tables(0).Rows(i).Item(0)
      
      'Change ItemDataBound marker to Negative Number
      shRow(2) = -1 ‘‘设置一个临时的标记
        ds.Tables(0).Rows.InsertAt(shRow, i)
           i += 1
    End If
       i += 1
   Loop
  ‘将最后一行的标题改为total
  ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1).Item(1) = "Total"
  DataGrid1.DataSource = ds
  DataGrid1.DataBind()
End Sub

时间: 2024-12-06 07:08:23

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

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

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

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

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

两表合并 统计汇总-根据出库表和入库表数据统计生成出入库统计表,SQL语句写法?

问题描述 根据出库表和入库表数据统计生成出入库统计表,SQL语句写法? 比较简易的出入库管理中,出库表包括:产品名称.出库数量.出库时间:入库表包括:产品名称.入库数量.入库时间:我需要得到的是在指定时间段内的每一个产品的入库总数量 出库总数量.哪位老师可以帮我写出这个SQL语句呢?MS SQL DELPHI2010 解决方案 类似这样把,没调试,自己调测一下吧 select * from (select distinct 产品名称 from 出库表 union select distinct

sql表进行数据统计,由第一个表统计得到第二个表

问题描述 sql表进行数据统计,由第一个表统计得到第二个表 面试有一个这样的题目:一张教师表,记录了每一个老师在星期几有课,表结构为teacher id week (星期几) 有课 1 1 有 1 1 有 1 2 有 1 3 有 2 1 有 2 2 有 3 3 有 3 3 有 怎么用sql统计称如下的表,每一天每位老师总共有多少课: id 星期一 星期二 星期三 1 2 1 1 2 1 1 0 3 0 0 2 该怎么统计称下面这个表呢?面试官说可以用case when来统计.我想的是用group

小米新一代大数据统计平台大公开

首次来到台北的小米研发架构师欧阳辰,看见城市中川流不息的摩托车车流,引起了他的注意:「它的特色很像大数据」,除了数量多.变化快,以及难以预测动向,摩托车也和大数据一般,都是解决人类生活在社会中的一项工具,「未来大数据会是重要的社会基础架构,就像水.电力一样.」 谈起大数据,不免回归最基本的问题:它跟传统数据分析的区隔为何. 欧阳辰表示:「在目标上,我认为两者没有区隔」,欧阳辰表示,传统统计分析解决的问题如人口统计议题,只需要经过随机抽样方法就能解决.但是碰上投放商业广告,若仍靠传统抽样分析结果,

mysql-MySql 数据统计Update Select优化

问题描述 MySql 数据统计Update Select优化 请教下各位大神,mysq update数据优化遇到的问题是这样的.表a有2个字段,ready_countdownload_count表b是统计表,有typeid两个表的储存引擎都是MYISAM需要把表b的数据count(1) group by(type)之后update到表a的那两个字段中. 我现在的SQL是这样的:update a _t1set_t1.ready_count = (SELECT count(1) FROM b _t2

第三方数据统计公司Hitwise 的数据显示

360综合搜索(so.360.cn)上线仅五日访问量份额就近10%,仅次于百度位居网页搜索第二位.不过数据一出,引来"嘘"声一片,除了质疑其真实性,360如何获取市场份额也引来巨大争议.此外,对于360搜索能否引起格局改变,也众说纷纭. 争议一 市场到底有多大? 近日,第三方数据统计公司Hitwise 的数据显示,360综合搜索(so.360.cn)上线仅五日访问量份额就近10%,仅次于百度位居网页搜索第二位.这一数据还得到"站长之家"和"安卓论坛&quo

c# 数据统计 请问如何实现

问题描述 c# 数据统计 请问如何实现 遇到一个棘手问题,请老师们帮解答一下: 原始的表 ![图片说明](http://img.ask.csdn.net/upload/201602/29/1456744918_718502.jpg) 统计表 ![图片说明](http://img.ask.csdn.net/upload/201602/29/1456744972_848207.jp 请问用c#如何实现 解决方案 using System; using System.Collections.Gener

图片-mysql分段数据统计sql怎么写

问题描述 mysql分段数据统计sql怎么写 , 1. 这是一张班级的成绩表,想统计出每个成绩段的数据,mysql的sql语句该怎么写呢. 解决方案 select '60分以下' type, count(*) from student s where s.score < 60 union all select '60分以上70分以下' type,count(*) from student s where s.score < 70 and s.score > 60 union all se