Sql in VBA 之 转置表(目前发现MS Office独有)

在Sql in VBA 中实现转置表查询的语句 TRANSFORM,语法如下:
TRANSFORM   aggfunction
SELECT   statement
PIVOT   pivotfield [IN(value1[,value2[,…]])]

成绩表:

姓名	学科	成绩
甲	语文	119
乙	语文	62
丙	语文	123
丁	语文	127
戊	语文	108
己	语文	128
庚	语文	166
辛	语文	108
甲	数学	140
乙	数学	90
丙	数学	126
丁	数学	107
戊	数学	66
己	数学	181
庚	数学	132
辛	数学	66
甲	英语	21
乙	英语	98
丙	英语	10
丁	英语	91
戊	英语	135
己	英语	105
庚	英语	189
辛	英语	135  

代码:

类模块传送至:https://www.cnblogs.com/Stefan-Gao/p/13520811.html

 1 Sub 转置表()
 2     Dim sql As String
 3     Dim Mypath As String, rng As Range
 4     Dim data As New 数据库
 5     
 6     Mypath = ThisWorkbook.FullName
 7     With ThisWorkbook.Worksheets("结果表")
 8         .Cells.Clear
 9         Set rng = .Range("a2")
10     End With
11    
12     'sql = "TRANSFORM SUM(成绩) SELECT 姓名 FROM[成绩表$] GROUP BY 姓名 PIVOT 学科"
13     'sql = "TRANSFORM SUM(成绩) SELECT 姓名 FROM[成绩表$] WHERE 成绩>80 GROUP BY 姓名 PIVOT 学科"
14     sql = "TRANSFORM SUM(成绩) SELECT 姓名 ,SUM(成绩) AS 总分,AVG(成绩) AS 平均分 FROM[成绩表$] GROUP BY 姓名 PIVOT 学科"
15     
16     data.查询 data.Excel数据库(Mypath), sql, rng
17 End Sub

结果如下:

姓名	总分	平均分	数学	英语	语文
丁	325	108.3	107	91	127
丙	259	86.3	126	10	123
乙	250	83.3	90	98	62
己	414	138.0	181	105	128
庚	487	162.3	132	189	166
戊	309	103.0	66	135	108
甲	280	93.3	140	21	119
辛	309	103.0	66	135	108

  

posted @ 2020-08-17 23:33  大黑山  阅读(585)  评论(0编辑  收藏  举报