zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    About Me
    洛谷 P2633 Count on a tree
    【题解】牛客编程巅峰赛S1赛季第1场
    洛谷 P4132 [BJOI2012]算不出的等式
    洛谷 P5970 [POI2016]Nim z utrudnieniem
    DP没入门就入土
    洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
    洛谷 P3592 [POI2015]MYJ
    51Nod 1683 最短路
    51Nod 1327 棋盘游戏
  • 原文地址:https://www.cnblogs.com/Stefan-Gao/p/13520904.html
Copyright © 2011-2022 走看看