Excel实例下载
  VBA  应用教程
    数据库SQL知识
设为首页
Group By - 分类汇总检索的数据
作者:bengdeng | 来源:Excel吧 | 时间:2008-10-16 | 阅读权限:游客 | 会员币:0 | 【

上一篇 SQL语言教程 中我们了解SQL自带的函数,现在我们就来介绍一下Select的第二个子句——Group By。

Group By的功能,类似于Excel的分类汇总,它们指定列中相同的数据,按对应的函数合并在一起处理,其使用的语法是:

SELECT 条件列名1, 函数(汇总列名1)  FROM 表格名  GROUP BY 条件列名1

要注意的是,条件列与汇总列都可以有一个或者多个,而汇总列名应该是可以让指定函数的计算类型,如果要在Select中列举出来,一定要在  GROUP BY 作为条件列出现,否则就会出错。但在GROUP BY 作为条件的列,不一定需要在Select中一一列举出来。

下面举个例子,这个例子,按物品名称汇总所有进仓表中各个物品的进仓数量,并列在一个新的工作表中。实例中还应用到ADO的Recordset对象,我们利用它来获得检索数据的列名,完整代码如下:

Sub 进销存表数据库中按条件分类汇总进仓表的数据()
'*******************************************
'时间:2008-10-16
'作者:bengdeng
'功能:在程序文件同一目录下进销存表数据库中按条件分类汇总进仓表的数据
'注意:要在工具/引用中引用microsoft activex date objects x.x
'      其中x.x为版本号,可能会因为你安装的office的版本不同而不同,本例引用了2.5版
'发布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim WN As String
Dim TableName As String
Dim sSql As String
Dim xSh As Worksheet
Dim sRan As Range
Dim ii As Integer

WN = "进销存表.mdb"
TableName = "进仓表"
'需要写入的工作表名称
Set xSh = ThisWorkbook.Worksheets.Add
'标题开始单元格
Set sRan = xSh.Range("A1")

Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
                        "Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
    sSql = "Select 物品名称, Sum(进仓数量) As 进仓汇总 From " & TableName & " Group By 物品名称"
    Set rst = New ADODB.Recordset
    rst.Open sSql, conn, 1, 3
    For ii = 0 To rst.Fields.Count - 1
        sRan.Offset(0, ii).Value = rst.Fields(ii).Name
    Next
   
    sRan.Offset(1, 0).CopyFromRecordset rst
   
    MsgBox "成功汇总“" & TableName & "”中的记录!", , "http://excelba.com"
    conn.Close
End If
Set conn = Nothing
End Sub

同样,我们也给出一段操作Excel文件的代码,让大家对比一下,如果你从第一篇 SQL语言教程 看到现在的话,应该也能把上面的代码修改为下面的这段代码了吧*~_~*

Sub 进销存表文件中按条件分类汇总进仓表的数据()
'*******************************************
'时间:2008-10-16
'作者:bengdeng
'功能:在程序文件同一目录下进销存表文件中按条件分类汇总进仓表的数据
'注意:要在工具/引用中引用microsoft activex date objects x.x
'      其中x.x为版本号,可能会因为你安装的office的版本不同而不同,本例引用了2.5版
'发布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim WN As String
Dim TableName As String
Dim sSql As String
Dim xSh As Worksheet
Dim sRan As Range
Dim ii As Integer

WN = "进销存表.xls"
TableName = "进仓表"
'需要写入的工作表名称
Set xSh = ThisWorkbook.Worksheets.Add
'标题开始单元格
Set sRan = xSh.Range("A1")

Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
                        "Extended Properties=Excel 8.0;" & _
                        "Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
    sSql = "Select 物品名称, Sum(进仓数量) As 进仓汇总 From [" & TableName & "$] Group By 物品名称"
    Set rst = New ADODB.Recordset
    rst.Open sSql, conn, 1, 3
    For ii = 0 To rst.Fields.Count - 1
        sRan.Offset(0, ii).Value = rst.Fields(ii).Name
    Next
   
    sRan.Offset(1, 0).CopyFromRecordset rst
   
    MsgBox "成功汇总“" & TableName & "”中的记录!", , "http://excelba.com"
    conn.Close
End If
Set conn = Nothing
End Sub

如果你不是从第一篇 SQL语言教程 看起,你需要到http://www.excelba.com/Soft/Html/119.html 下载文件,压缩文件包含三个文件,数据库文件——进销存表.mdb与Excel文件——进销存表.xls就是保存数据的文件,而主文件.xls就是主程序文件,以后大家的代码可以添加在这个文件的新模块里,然后再运行程序代码。

之后大家就可以复制上面的代码,然后运行看一下效果,理解一下这篇文章的内容吧。

文章录入:admin | 浏览次数:
相关评论(以下网友评论只代表其个人观点,不代表Excel吧的观点或立场)
相关信息

关于本站 | 留言本站 | 友情连接 | 后台管理
Copyright © 2005 - 2008 Excel吧 Inc. All Rights Reserved.
HxCms Ver9.0  闽ICP备06001689号
关闭此窗口