用SQL语句实现技巧的分类汇总的效果
原数据
http://s8/mw690/001f8HsBzy6Kz4EzGdNa7&690
模拟要求:
http://s7/mw690/001f8HsBzy6Kz4Drkhg56&690
使用代码的效果:
http://s4/mw690/001f8HsBzy6Kz4CpwRR63&690
SQL代码:
Sub Test()
Dim WbNamePath As String, Sht
As Worksheet, SQL As String
Set Sht = Sheet4
'存放结果的工作表
WbNamePath =
ThisWorkbook.FullName '设置工作簿的完整路径和名称
'SQL语句
SQL = "select * from (select
省份,项目设计,数量,金额 from [项目表$] union all select [省份]&' 汇总',
count(项目设计) as 项目设计 ,sum(数量) as 数量, sum(金额) as 金额 from [项目表$] group
by 省份) order by 省份"
Call SQL执行(WbNamePath, Sht,
SQL)
End Sub
'以下程序是公共程序,直接使用,不用修改
Sub SQL执行(WbNamePath As String, Sht, SQLstr As String)
Dim Conn As Object, Rst As
Object
Dim strConn As String, strSQL
As String
Dim i As Integer, PathStr As
String
Set Conn =
CreateObject("ADODB.Connection"): Set Rst =
CreateObject("ADODB.Recordset")
On Error GoTo 出错提示
PathStr = WbNamePath
'设置工作簿的完整路径和名称
Select Case
Application.Version * 1
'设置连接字符串,根据版本创建连接
Case Is <= 11
'03以下版本包含03
strConn =
"Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel
8.0;Data source=" & PathStr
Case Is >= 12
'07以上版本包含07
strConn =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr
& ";Extended Properties=""Excel 12.0;HDR=YES"";"""
End Select
Conn.Open strConn
'打开数据库链接
strSQL = SQLstr
'设置SQL查询语句
Set Rst =
Conn.Execute(strSQL)
'执行查询,并将结果输出到记录集对象
With Sht
.Cells.Clear
For i = 0 To Rst.Fields.Count - 1
'填写标题
.Cells(1,
i + 1) = Rst.Fields(i).Name
Next i
Range("A2").CopyFromRecordset Rst
.Cells.EntireColumn.AutoFit
'自动调整列宽
End With
Rst.Close: Conn.Close
'关闭数据库连接
Set Conn = Nothing: Set Rst =
Nothing '释放对象变量
Exit Sub
出错提示:
MsgBox Err.Description, ,
"雪山飞狐温馨提示"
End Sub
解题思路分享:
提出的要求是要保留原来的数据并分类汇总
1.保留原来数据的SQL语句
select 省份,项目设计,数量,金额 from [项目表$]
2.分类汇总(省份字段为划分)的SQL语句:
select [省份]&' 汇总', count(项目设计) as 项目设计
,sum(数量) as 数量, sum(金额) as 金额 from [项目表$] group by 省份
3.把上面二个数据放在一起,在SQL中称为连接
4.把放在一起的表按省份进行排序,这样汇总的最省份的最一行,实现最终分类汇总的效果
新浪博客:http://weibo.com/u/1139851561
百度空间:http://hi.baidu.com/335081548
往期精彩在:
腾讯(QQ)微博:http://t.qq.com/huangshifang?preview
更多分享请关注微信号
微信号:Excel335081548 或:
雪山飞狐Excel
http://s8/mw690/001f8HsBzy6Kz4AUcGb27&690
加载中,请稍候......