You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA调用ADO执行含LEFT JOIN的TRANSFORM SQL语句报语法错误

问题根因

Excel 调用的 ACE OLEDB 12.0 驱动对 TRANSFORM 语句的语法校验比 Access 更严格:所有出现在 PIVOT、ORDER BY 子句的非聚合字段,必须全部在 GROUP BY 子句中显式声明。你当前的 SQL 里 PIVOT 和 ORDER BY 用到的 MESI$.MESE 字段未加入 GROUP BY 列表,因此触发语法报错。

修复方案

只需在 GROUP BY 子句中补充 [MESI$].MESE 字段即可,也可以给工作表名加上方括号提升兼容性,修改后的完整代码如下:

Sub generaRicavi()
    Dim RS As New ADODB.Recordset
    Dim conn As String, SQL As String
    
    Application.ScreenUpdating = False
    conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & "; Jet OLEDB:Bypass ChoiceField Validation =True;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
            
    SQL = "TRANSFORM Sum([Foglio1$].RICAVI)" _
            & " SELECT Year([Foglio1$].[DATA])" _
            & " FROM [MESI$] LEFT JOIN [Foglio1$] ON [MESI$].MESE =  Month([Foglio1$].[DATA])" _
            & " GROUP BY Year([Foglio1$].[DATA]), [MESI$].MESE" _
            & " ORDER BY Year([Foglio1$].[DATA]), [MESI$].MESE" _
            & " PIVOT [MESI$].MESE;"
            
    RS.Open SQL, conn, adOpenStatic, adLockReadOnly
    
    With Foglio2
        .Range("A3").CurrentRegion.ClearContents
        .Range("A3:M3") = Array("ANNO","GENNAIO", "FEBBRAIO", "MARZO", "APRILE", "MAGGIO", "GIUGNO", "LUGLIO", "AGOSTO", "SETTEMBRE", "OTTOBRE", "NOVEMBRE", "DICEMBRE")
        .Range("A4").CopyFromRecordset RS
    End With
    
    RS.Close
    Application.ScreenUpdating = True
    Set RS = Nothing
End Sub

如果仍有兼容问题,可以改用子查询写法,语法适配性更强:

SQL = "TRANSFORM Sum(RICAVI) " _
        & " SELECT ANNO " _
        & " FROM (SELECT Year([Foglio1$].[DATA]) AS ANNO, [MESI$].MESE, [Foglio1$].RICAVI " _
        & " FROM [MESI$] LEFT JOIN [Foglio1$] ON [MESI$].MESE = Month([Foglio1$].[DATA])) " _
        & " GROUP BY ANNO " _
        & " ORDER BY ANNO, MESE " _
        & " PIVOT MESE;"

内容的提问来源于stack exchange,提问作者kris9951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:36:07