首页 > 解决方案 > SQL 连接并插入新列作为父总数的百分比 - FROM 子句中的语法错误

问题描述

使用 sql 从 excel 工作表(工作表名称为 Structre)查询以下 vba 代码,但我遇到“FROM 子句中的语法错误”

Dim MyConnect As String
Dim MyRecordset As ADODB.Recordset
Dim MySQL As String

MyConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ThisWorkbook.FullName & ";" & _
           "Extended Properties=Excel 12.0" 
mysql2 = SELECT [Structure$].c, [Structure$].a, [Structure$].b from [Structure$] _
join(SELECT a, sum(c) as csum FROM [Structure$] group by a) tmp on tmp.a=[Structure$].a

Set MyRecordset = New ADODB.Recordset
MyRecordset.Open mysql2, MyConnect, adOpenStatic, adLockReadOnly, adCmdText

 ThisWorkbook.Sheets.Add
 ActiveSheet.Range("A2").CopyFromRecordset MyRecordset

 a           b      c       Desired col: weights
Finance      1      123     123/(123+345+456)
Finance      2      345     345/(123+345+456)
Finance      3      456     456/(123+345+456)
Operation    1      789     789/(789+12)
Operation    2      12      12/(789+12)
BD           1      111     111/(111+222)
BD           2      222     222/(111+222)

我想做的是从表中(包含列 a、b、c),检索它们并插入一个新的列权重作为 c/sum(groupby(a)),如上表所示。不知道我哪里出错了(还是 sql 的新手)。

感谢任何帮助

标签: excelvbajoinadodb

解决方案


您可以简单地使用 excel 公式而不是编写 vba 代码。

以下将计算您可以在 E 列中使用的总和(按 a 分组)

=IF(A2=A1,SUMIF(A:A,A2,C:C),SUMIF(A:A,A2,C:C))

然后您可以在 D 列中使用以下内容

=C2/E2

您也可以结合这两个公式。

=C2/IF(A2=A1,SUMIF(A:A,A2,C:C),SUMIF(A:A,A2,C:C))

推荐阅读