SQL连接并将新列作为父级总计插入-FROM子句中的语法错误

问题描述 投票:0回答:1

具有以下vba代码,可使用sql从excel工作表(工作表名称为Structre)中查询,但即时消息遇到“ 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的新手)。

感谢任何帮助

excel vba join adodb
1个回答
0
投票
下面将计算可在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))
© www.soinside.com 2019 - 2024. All rights reserved.