Private-Bookers
Microsoft Access 2007
вернуться

Днепров Александр Г.

Шрифт:

Текст итогового запроса с объединением приведен в листинге 6.15.

...

Листинг 6.15.

Запрос на добавление

INSERT INTO Заказы (Дата, Товар, Количество, Сумма, Клиент)

SELECT Заказы. Дата, Заказы. Товар, Заказы. Количество, Заказы. Сумма,

Заказы. Клиент

FROM Заказы;

8. Перейдите на вкладку Конструктор и выберите команду Выполнить . Откроется окно подтверждения операции добавления.

9. Нажмите кнопку Да .

10. Откройте таблицу Заказы (рис. 6.30).

Рис. 6.30. Таблица Заказы после выполнения запроса на добавление

Теперь таблица Заказы содержит некорректные данные, которые необходимо исправить. Для этого используйте мастер запросов.

1. На вкладке Создание в группе Другие нажмите кнопку Мастер запросов . Откроется окно Новый запрос (рис. 6.31).

Рис. 6.31. Окно Новый запрос

2. Теперь выберите пункт Повторяющиеся записи , а за тем нажмите кнопку ОК . Откроется окно Поиск повторяющихся записей (рис. 6.32).

Рис. 6.32. В этом окне нужно указать таблицу для поиска повторяющихся записей

3. Укажите таблицу Заказы и нажмите кнопку Далее .

4. Выберите поля Дата , Товар , Клиент (рис. 6.33) и нажмите кнопку Готово .

Рис. 6.33. Здесь следует задать поля с повторяющимися значениями

Будет выведен список повторений по таблице Заказы (рис. 6.34).

Рис. 6.34. Результат поиска повторяющихся записей

Если записи различаются значениями других полей, не вошедших в выборку, возможно, лучшим способом удаления будет удаление записей вручную, ведь только вы знаете критерий, по которому можно отделить корректные записи от ошибочных.

В данном случае записи действительно полностью одинаковые, и процесс их удаления хотелось бы автоматизировать запросом. Если просто преобразовать данный запрос на выборку в запрос на удаление, то удалятся все повторяющиеся записи. Обычно все же требуется оставить по одному экземпляру записей.

Чтобы получить желаемый результат, следуйте нижеприведенным действиям.

1. Добавьте в таблицу временное поле Сохранить логического типа. Это поле будет хранить значение 1 , если запись требуется оставить, и значение 0 – если удалить.

2. Оставьте все записи с минимальным значением поля Номер . Щелкните правой кнопкой мыши на заголовке вкладки запроса. Выберите пункт контекстного меню Режим SQL .

3. Скопируйте содержимое листинга 6.16 в запрос.

...

Листинг 6.16.

Запрос на установку флага для последующего удаления дубликатов

UPDATE Заказы

SET Сохранить = 1

WHERE [Номер (ID)] IN

(SELECT Min([Номер (ID)]) FROM Заказы GROUP BY Заказы. Дата, Заказы.

Товар, Заказы. Клиент HAVING (((Count(Дата))>1) AND

((Count(Клиент))>1)))

Как видите, запрос является запросом на обновление, но в качестве условия используется упрощенный запрос на выборку, составленный мастером запросов. Запись помечается только в том случае, если ее номер совпадает с минимальным значением номера в ее группе дубликатов.

4. Перейдите на вкладку Конструктор и выберите команду Выполнить . Откроется окно подтверждения операции обновления.

5. Нажмите кнопку Да .

6. Откройте таблицу Заказы (рис. 6.35).

Рис. 6.35. Результат выполнения запроса

Теперь осталось удалить повторяющиеся записи с неустановленным флажком.

1. Откройте мастер запросов, как было описано выше. Выберите пункт Повторяющиеся записи и нажмите кнопку ОК .

2. Добавьте поля Товар , Дата , Клиент и нажмите кнопку Далее .

3. Добавьте поле Сохранить (рис. 6.36) и нажмите кнопку Готово .

Рис. 6.36. Окно поиска повторяющихся записей

4. Щелкните правой кнопкой мыши на заголовке вкладки запроса. Выберите команду Конструктор .

5. В бланке запроса в строке Условие отбора для поля Сохранить введите 0.

6. На вкладке Конструктор в группе Тип запроса выберите команду Удаление .

Результирующий бланк запроса на удаление показан на рис. 6.37.

Рис. 6.37. Результирующий бланк запроса на удаление

Текст запроса на удаление приведен в листинге 6.17.

...

Листинг 6.17.

Запрос на удаление дубликатов

DELETE Заказы. [Дата], Заказы. [Товар], Заказы. [Клиент],

Заказы. [Сохранить]

FROM Заказы

WHERE (((Заказы. [Дата]) In (SELECT [Дата] FROM [Заказы] As Tmp GROUP

BY [Дата],[Товар],[Клиент] HAVING Count(*)>1 And [Товар] =

[Заказы].[Товар] And [Клиент] = [Заказы].[Клиент])) AND

((Заказы. [Сохранить])=0));

  • Читать дальше
  • 1
  • ...
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка