SQL присоединение и вставка нового столбца как% родительского итога - синтаксическая ошибка в предложении FROM - PullRequest
0 голосов
/ 04 февраля 2020

имеют следующий код vba для запроса из листа Excel (имя листа Structre), используя sql, но я сталкиваюсь с «синтаксической ошибкой в ​​предложении 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)), как показано в таблице выше. Не уверен, где я иду не так (все еще newb ie до sql).

Ценю любую помощь

1 Ответ

0 голосов
/ 04 февраля 2020

Вы можете просто использовать формулу Excel вместо написания кода VBA.

Ниже будет рассчитана сумма (сгруппированная по a), которую вы можете использовать в столбце E

=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))
...