2014-03-31 62 views
2

我有两个表(1 & 2)应该合并到第三个表中。在Excel中使用SQL“分组依据”功能组数据VBA

表1:F_Number,A_Number,A_Weight
表2:A_Number,A_Country
表3:F_Number,A_Country,A_Weight

的THRID表应由F_Number总结A_Weight其中A_Country具有相同的值进行分组。细到目前为止表的加盟作品:

Dim strSQL As String 
Dim Conn As New ADODB.Connection 
Dim mrs As New ADODB.Recordset 
Dim DBPath As String 
Dim sconnect As String 

DBPath = ThisWorkbook.FullName 
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';" 

Conn.Open sconnect 
    strSQL = "Select [Table1$].[F_Number], [Table2$].[A_Country], [Table1$].[A_Weight] From [Table1$] Inner Join [Table2$] On [Table2$].[A_Number]=[Table1$].[A_Number]" 
    mrs.Open strSQL, Conn 
    ActiveSheet.Range("A2").CopyFromRecordset mrs 
    mrs.Close 
Conn.Close 

结果是这样的一个表:

F_Number;一个国家; A_Weight
F_1;我们; 10%
F_1:US; 10%
F_1;英国; 80%
F_2;英国; 100%

我想这个表由 “A_Weight” 进行分组如下:

F_Number;一个国家; A_Weight
F_1;我们; 20%
F_1;英国; 80%
F_2;英国; 100%

我对SQL没有太多了解,但是到目前为止我尝试过的是总结A_Weight并按F_Number对结果进行分组,这给了我一个错误信息。我正在使用德语版本,因此我只能尝试翻译错误:“自动化错误”。我仍然认为它应该像这样工作。

这里是我的非工作代码,SQL字符串:

strSQL = "Select [Table1$].[F_Number], [Table2$].[A_Country], Sum([Table1$].[A_Weight]) From [Table1$] Inner Join [Table2$] On [Table2$].[A_Number]=[Table1$].[A_Number] Group By [Table1$].[F_Number]" 
+0

您需要使用Aggregate函数对行进行分组。 –

+0

感谢Pankaj Jaju,但我认为'sum'是我的聚合函数。我是否也需要'F_Number'这样的功能?仍然,错误消息表明语法错误。 – user3480701

回答

1

你的代码是正确的;你只需要修改SQL查询。

strSQL = "SELECT [Table1$].[F_Number], [Table2$].[A_Country], SUM([Table1$].[A_Weight]) " & _ 
     "FROM [Table1$], [Table2$] " & _ 
     "WHERE [Table2$].[A_Number] = [Table1$].[A_Number] " & _ 
     "GROUP BY [Table1$].[F_Number], [Table2$].[A_Country]"