Сгруппируйте по двум таблицам и выполните левое соединение по результатам VBA ADODB SQL Query - PullRequest
0 голосов
/ 30 августа 2018

Я хочу выполнить Group BY для двух файлов CSV, а затем выполнить левое соединение для результатов обеих таблиц через VBA ADO Query в Excel. Мой конечный мотив - распечатать набор записей.

Вот что я сделал до сих пор.

     SELECT * FROM (
                   SELECT   f1.[c3],
                            f1.[c4],
                            f1.[c5],
                            f1.[c6],
                            Sum(f1.[c8]) AS SUMDATA
                   FROM     test1.csv F1 
                   GROUP BY f1.[c3],
                            f1.[c4],
                            f1.[c5],
                            f1.[c6]) AS f3
LEFT JOIN  SELECT * FROM   (
                SELECT   f2.[c3],
                         f2.[c4],
                         f2.[c5],
                         f2.[c6],
                         Sum(f2.[c8]) AS SUMDATA
                FROM     test2.csv f2
                GROUP BY f2.[c3],
                         f2.[c4],
                         f2.[c5],
                         f2.[c6]) AS f4
on  f3.[c3]+ f3.[c4]+ f3.[c5]+ f3.[c6] = f4.[c3]+ f4.[c4]+ f4.[c5]+ f4.[c6]
WHERE  f3.[SUMDATA] <> f4.[SUMDATA] 

Это показывает синтаксическую ошибку. Как это реализовать? Буду признателен за любую оказанную помощь. ТИА.

Обновление -

Мне удается реализовать 1 LEFT JOIN и 2 GROUP BYs между 2 таблицами. Согласно запросу, вот несколько деталей относительно моего набора данных. Он состоит из полей - c1, c2 .... c8. с8 - моя цель

Мой ожидаемый результат - мне не нужны c7, c1 и c2 в выходном листе. Информация о c7, c1 и c2 не имеет значения. Мне нужно сделать 5 вещей с моими данными.

  1. Группировать Суммирование поля c8 на основе полей c3, c4, c5 и c6 в CSV-файле 1 и сохранять целевое поле как SUMDATA

  2. Группировка Суммируйте поля c8 на основе полей c3, c4, c5 и c6 в CSV-файле 2 и сохраняйте поле назначения как SUMDATA

  3. Найдите несовпадающие записи в полях SUMDATA между CSV1 и CSV2 (я использовал LEFT JOIN для этого в объединенных полях c3, c4, c5, c6)

  4. Найти записи, которые присутствуют в CSV1, но отсутствуют в CSV2

  5. Найти записи, которые присутствуют в CSV2, но отсутствуют в CSV1

В настоящее время мне удается написать код, который работает до шага 3. Мне нужно временно сохранить сгруппированные таблицы, полученные из шагов 1 и 2, чтобы выполнить шаги 4 и 5, что можно сделать еще через 2 UNION, LEFT JOINs и WHERE комбинация. Вот где я застрял прямо сейчас.

1 Ответ

0 голосов
/ 30 августа 2018

Это не совсем ответ, но форматирование важно для удобства чтения.

Похоже, что ваш SQL сильно не в порядке.

Синтаксис должен выглядеть следующим образом (при условии, что запрос csv работает так, как вы думаете):

SELECT SUB1.Field1,
       SUB1.AggField AS Agg1,
       SUB2.AggField AS Agg2
  FROM (SELECT Field1,
               MAX(Field2) Agg_Field
          FROM Table1 T1
         GROUP
            BY Field1
       ) SUB1
  LEFT
  JOIN (SELECT Field1,
               MAX(Field2) Agg_Field
          FROM Table1 T2
         GROUP
            BY Field1
       ) SUB2
    ON SUB1.Field1 = SUB2.Field1
 WHERE SUB1.AggField <> SUB2.AggField;

Также вам не хватает запятой здесь: F1. [C5] F1. [C6] в первом фрагменте.

Попробуйте исправить синтаксис SQL следующим образом и посмотрите, к чему это приведет.

...