|
楼主 |
发表于 2009-5-13 21:47
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
例三:
表格如下:
序号 部门 学历
1 bm1 大学
2 bm2 大专
3 bm1 大学
4 bm2 大学
5 bm1 中专
要求按在部门统计三种学历的数量,结果如下:
部门 大学 大专 中专
bm1 2 1
bm2 1 1
我们的SQL语句如下:
Sub 行列转制3()
Set rngt = Sheets("新表").Range("a1").CurrentRegion
sAddress = rngt.Address(0, 0)
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
strSQL = "TRANSFORM count(学历) SELECT 部门 FROM [新表$" & sAddress & "] GROUP BY 部门 PIVOT 学历 in(大学,大专,中专)"
rs.Open (strSQL), cnn, adOpenKeyset, adLockReadOnly
For Each Field In rs.Fields
aa = Field.Name
[E1].Offset(0, i) = Field.Name
i = i + 1
Next
Sheets("新表").Range("E2").CopyFromRecordset rs
Set rs = Nothing
Set cnn = Nothing
End Sub
关键语句:
strSQL = "TRANSFORM count(学历) SELECT 部门 FROM [新表$" & sAddress & "] GROUP BY 部门 PIVOT 学历 in(大学,大专,中专)"
TRANSFORM——是固定格式
count(学历)——对学历的计数方式,这里强调必须是SQL合计函数,主要有一下几种:
Avg 函数
Count 函数
First, Last 函数
Min, Max 函数
StDev, StDevP 函数
Sum 函数
Var 和 VarP 函数
他们的用法自己可以在网上找到,我就不啰嗦了!
PIVOT 学历 in(大学,大专,中专)——按照排好的顺序来显示列顺序,如果没有in(大学,大专,中专),则按照汉语拼音的方式排列!
例四:
表格如下:
款号 配色 面料开发厂 编号 物料名称 颜色 使用部位说明
ALT1818 -1 福田 KZ015 40S/2全棉平纹190g 09深蓝 主身
ALT1818 -1 振兴 KZ011 亮光布130g 34青金色 拼条、牙子
ALT1818 -1 福田 KZ015 40S/2全棉平纹190g 01正白 拼条
ALT1818 -1 福田 KZ042 1X1棉罗纹260g 09深蓝 领口
ALT1818 -2 福田 KZ015 40S/2全棉平纹190g 09深蓝 主身
ALT1818 -2 振兴 KZ011 亮光布130g 34青金色 拼条、牙子
ALT1818 -2 福田 KZ015 40S/2全棉平纹190g 01正白 拼条
要求加入配色列,统计颜色,结果如下:
款号 面料开发厂 编号 物料名称 使用部位说明 -1 -2 -3
ALT1818 振兴 KZ011 亮光布130g 拼条、牙子 34青金色 34青金色
ALT1818 福田 KZ015 40S/2全棉平纹190g 主身 09深蓝 09深蓝
ALT1818 福田 KZ015 40S/2全棉平纹190g 拼条 01正白 01正白
ALT1818 福田 KZ042 1X1棉罗纹260g 领口 09深蓝
代码如下:
Sub 行列转制4()
Sheets("总表").Select
maxrow = Sheets("总表").[b65536].End(xlUp).Row
Set rngt = Sheets("总表").Range("a2").CurrentRegion
sAddress = rngt.Address(0, 0)
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
strSQL = "TRANSFORM First(颜色) SELECT 款号,面料开发厂,编号,物料名称,使用部位说明 FROM [总表$" & sAddress & "] " & _
"GROUP BY 款号,面料开发厂,编号,物料名称,使用部位说明 PIVOT 配色 in(-1,-2,-3) "
rs.Open (strSQL), cnn, adOpenKeyset, adLockReadOnly
For Each Field In rs.Fields
aa = Field.Name
Sheets("想要的结果").Select
Sheets("想要的结果").[a2].Offset(0, i) = Field.Name
i = i + 1
Next
Sheets("想要的结果").Range("a3").CopyFromRecordset rs
Set rs = Nothing
Set cnn = Nothing
End Sub
关键语句:
strSQL = "TRANSFORM First(颜色) SELECT 款号,面料开发厂,编号,物料名称,使用部位说明 FROM [总表$" & sAddress & "] " & _
"GROUP BY 款号,面料开发厂,编号,物料名称,使用部位说明 PIVOT 配色 in(-1,-2,-3) "
First(颜色)——First函数是在查询所返回的结果集中,第一个记录或最后一个记录所返回的字段值。利用这个我们可以返回颜色里的描述。
SELECT 款号,面料开发厂,编号,物料名称,使用部位说明 FROM [总表$" & sAddress & "] " & _
"GROUP BY 款号,面料开发厂,编号,物料名称,使用部位说明——返回我们想要的行标
款号 面料开发厂 编号 物料名称 使用部位说明
ALT1818 振兴 KZ011 亮光布130g 拼条、牙子
ALT1818 福田 KZ015 40S/2全棉平纹190g 主身
ALT1818 福田 KZ015 40S/2全棉平纹190g 拼条
ALT1818 福田 KZ042 1X1棉罗纹260g 领口
PIVOT 配色 in(-1,-2,-3)——添加配色列。
[ 本帖最后由 wsri 于 2009-5-13 22:45 编辑 ] |
|