ad

《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_3.2.9 利用合计函数

网友投稿 137 2023-11-07

【摘要】 本书摘自《Excel VBA+SQL数据管理与应用模板开发》一书中第3章,第2节,韩小良著。

3.2.9 利用合计函数 COUNT、MAX、MIN、SUM、AVG进行查询

对数据进行汇总计算并输出结果是数据统计中经常遇到的一个问题。例如,要汇总各个 客户的订单数和销售额合计,找出销售额最大或最小的记录;对产品进行统计分析,统计 每个产品的订单数、销售量和销售总额,哪个产品销售额最大。这时,可以使用合计函数 COUNT、MAX、MIN、AVG和 SUM 等进行查询。

《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_3.2.9 利用合计函数

使用合计函数汇总数据的 SQL语句格式如下:

SELECT 函数名(字段名)AS 别名 FROM 数据表 WHERE 条件

这里,要为查询统计结果定义一个别名,以便将计算结果输出。

例如,下面的表达式就是把销售额的合计数 “SUM(销售额)”定义为一个字段名称“销 售总额”。

SUM(销售额)as 销售总额

案例3-10

下面的例子就是从合同信息中按供货商进行汇总查询,统计各个供货商的合同数与合同 总额。

Sub 案例3-100

Dim cnn As New ADODB.Connection

Dim rs As ADODB.Recordset

Dim ws As Worksheet

Dim i As Integer

Set ws=This Workbook.Worksheets("查找结果")

ws.Cells.ClearContents

ws.Range("A₁ :C1")=Array("供货商","合同数","合同总额")

'建立与工作簿的连接

With cnn

.Provider ="microsoft.ace.oledb.12.0"

.ConnectionString="Extended Properties=Excel 12.0;"_

&"Data Source="&ThisWorkbook.FullName

.Open

End With

'先获取不重复的供货商名单

SQL="select distinct 供货商 from[合同信息$]"

Set rs =New ADODB.Recordset

rs.Open SQL,cnn,adOpenKeyset,adLockOptimistic

ws.Range("A2").CopyFromRecordset rs

'循环每个供货商,进行统计汇总

Fori=2 To ws.Range("A1000").End(xIUp).Row

SQL="select count(供货商)as 合同数,sum(合同金额)as 合同总额 from[合同信息S] where 供货商='"'&ws.Range("A"&i)&"""

Set rs =New ADODB.Recordset

rs.Open SQL,cnn,adOpenKeyset,adLockOptimistic

ws.Range("B"&i)=rs!合同数

ws.Range("C"&i)=rs!合同总额

Next i

'关闭查询和连接

rs.Close

cnn.Close

Set rs =Nothing

Set cnn =Nothing

End Sub

在这个程序中,由于要做多次查找,因此在程序顶部做查询数据集变量声明时,声明 语句如下:

Dim rs As ADODB.Recordset

而在程序中,每次查找之前,首先要赋值一个新的查询数据集变量,语句如下:

Set rs =New ADODB.Recordset

利 用 GROUP BY 将查询结果进行分组

仅仅利用函数来制作合计汇总报表还是不太方便的,因为需要先获取不重复供货商名单, 再依次循环查找和统计。

其实,我们可以直接利用GROUP BY 子句将查询结果分成若干组,以字段值相同的记录 为一组,然后根据情况配合合计函数进行统计汇总,这种汇总方式效率更高。其SQL语句的 格式如下:

SELECT 字段1,SUM(字段2)FROM 数据表GROUP BY 字段1

案例3-11

下面的例子就是从合同信息中按供货商进行汇总查询,统计各个供货商的合同数、合同 总额,并按合同总额从大到小进行排序。

Sub 案例3-110

Dim cnn As New ADODB.Connection

Dim rs As ADODB.Recordset

Dim ws As Worksheet

Set ws =ThisWorkbook.Worksheets("查找结果")

ws.Cells.ClearContents

ws.Range("A1:C1")=Array("供货商","合同数","合同总额")

建立与工作簿的连接

With cnn

.Provider ="microsoft.ace.oledb.12.0"

.ConnectionString="Extended Properties=Excel 12.0;"_

Source="&ThisWorkbook.FullName

.Open

End With

'进行统计汇总

SQL="select 供货商,count(供货商)as 合同数,sum (合同金额)as 合同总额from[合同信息 $]group by 供货商 order by sum(合同金额)desc"

Set rs =New ADODB.Recordset

rs.Open SQL,cnn,adOpenKeyset,adLockOptimistic

'复制汇总结果

ws.Range("A2").CopyFromRecordset rs

'关闭查询和连接

rs.Close

cnn.Close

Set rs =Nothing

Set cnn =Nothing

End Sub

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Excel VBA+SQL数据管理与应用模板开发》_4.4 通过窗体对数据进行维护
下一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_2.7.1 Python字符串基础
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×