WEB开发网
开发学院数据库MSSQL Server 用ROLLUP进行分类数据统计(二) 阅读

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

 2007-05-17 09:37:38 来源:WEB开发网   
核心提示:我们介绍了ms sql server中的roll up语句,下面开始介绍如何用datagrid结合rollup语句来进行分类统计,用ROLLUP进行分类数据统计(二),我们要达到的效果是这样的:首先,应先将数据库中的产品数据按照所属的不同的目录列举出来,同时将roll up的统计结果显示在相应的位置就可以了,我们先来看

我们介绍了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

1 2  下一页

Tags:ROLLUP 进行 分类

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接