excel - 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 的新手)。
感谢任何帮助
解决方案
您可以简单地使用 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))
推荐阅读
- javascript - 显示 JSON 字符串的 Lightning Web 组件不起作用
- vb.net - 不懂做visual basic显示国家和城市的项目
- r - R 在 for 循环中使用 tryCatch 将带有错误值的行添加到输出
- dart - 将 BLE 写入骑行控制点 - 添加阻力
- c - C 编程 scanf 帮助
- html - 如何将视频移到一边?
- java - 当我使用 javamail 将回复邮件发送到 Outlook 帐户时,为什么将回复邮件作为附件发送?
- xamarin.forms - 我想为 xamarin Android 应用程序添加捏和缩放图像编辑功能
- c# - 当 Outlook 在没有“以管理员身份运行”的情况下运行时,无法在客户部署上加载 Outlook 加载项用户控件
- excel - 使用索引选择重复匹配的范围