在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