Как извлечь информацию из базы данных, чтобы преуспеть - PullRequest
1 голос
/ 12 августа 2011

У меня в Excel более 50 000 строк данных, которые выглядят так:

SKU     SerialNo
AZQW    10001   
XSWE    10023   
GTYH    10230   
MKLJ    10378       
GHYU    10567       
GTYH    10895

Таблица в базе данных, которую я хочу извлечь, выглядит следующим образом: -

SKU     SerialNo    Grade
AZQW    10001           A
XSWE    10023           B
CVFR    10043           D
GTYH    10230           B
MKLJ    10378           A
RTYH    10456           C
GHYU    10567           D
AZQW    10784           B
GTYH    10895           B

Окончательный результат в Excel должен быть следующим, т.е. добавить информацию об оценке: -

SKU     SerialNo    Grade
AZQW    10001   A
XSWE    10023   B
GTYH    10230   B
MKLJ    10378   A
GHYU    10567   D
GTYH    10895   B

Как мне добиться этого с помощью макроса? Если это невозможно, возможно ли автоматизировать оператор SQL, который запускается строка за строкой, чтобы извлечь поле rq'd (т.е. Grade)?

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Если я правильно понял, меня довольно легко достичь с помощью макроса Excel.

Сначала выведите данные вашей БД на отдельную таблицу вашего документа Excel. Убедитесь, что оба листа (исходный лист с данными и новый с данными БД) отсортированы, иначе сортируйте их с помощью макроса.

Затем перейдите вниз по списку и добавьте оценку в столбец «SerialNo» исходного листа при совпадении строки.

По окончании не забудьте удалить лист с данными в БД. Это должно быть лучше, чем вызывать базу данных в 50 000 раз, я обычно стараюсь минимизировать количество вызовов базы данных, потому что они медленные.

РЕДАКТИРОВАТЬ: так как у вас есть много записей в таблице для вывода в SQL Worksheet, я бы посоветовал вам импортировать все данные Excel во временную таблицу SQL, сделать легкий выбор, соединив временную таблицу с другой и экспортировать результат в файл Excel!

select t1.SKU SKU, concat(t1.SerialNo, "  ", t1.grade) SerialGrade from yourTable t1
    join tempTable t2 on t2.SerialNo = t1.SerialNo
    orderby t1.SerialNo ASC
0 голосов
/ 12 августа 2011

Я бы не использовал VBA для этого, если вам не нужно. Создайте новый лист и поместите на него запрос внешних данных. Если вы используете Access или SQLServer, вы можете OLEDB прямо к ним. В противном случае вы можете использовать MSQuery для установления соединения ODBC. Переместите соответствующие столбцы, серийный номер и класс. Похоже, серийный номер является уникальным, поэтому вам нужно взять SKU из базы данных.

Затем используйте формулу VLOOKUP, чтобы перенести оценку в основной лист. Вы можете даже скрыть лист с запросом внешних данных, если хотите.

0 голосов
/ 12 августа 2011

я не вижу быстрого способа с этим справиться:

  1. построить макрос, который будет вызывать оператор SQL для каждой строки >> потребуется много запросов к БД
  2. создать уникальный запрос SQL, который будет достаточным для всех значений >> я не могу найти способ сделать это
  3. единственный способ увидеть это - экспортировать значения SQL в другой лист вашей рабочей книги и использовать формулу VLOOKUP()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...