MS Access: подсчет числа строк с уникальными значениями одного из параметров

Уверен, кому-то приведенная здесь задача покажется простой, ну а для тех, кто как я пользуется MS Access от случая к случаю, может и пригодиться.
Специфика моей работы такова, что периодически требуется произвести анализ большого массива данных в достаточно сжатые сроки. Один из классов таких задач по анализу данных в общем виде можно свести к следующему:
Имеется два столбца. Данные могут повторяться как в первом, так и во втором столбце, также могут повторяться пары значений первого и второго столбца. Требуется выяснить может ли в рамках одного значения первого столбца быть несколько разных значений из второго столбца.
Решение такой задачи, на мой взгляд, наиболее просто произвести в MS Access. Пишу эту заметку скорее для себя, так как периодически забываю как это сделать и звоню коллеге за напоминаниями (привет, Андрей!).

И так к делу. Ниже на картинке представлен пример такого набора данных:

В первом столбце буквы (letter), во втором — цифры (number). Теперь разберемся есть ли случаи, когда одной и той же букве соответствует два и больше разных значений цифр.
Для начала удалим дубли пар значений букв и цифр. Для этого в конструкторе запросов выбираем нашу таблицу и выбираем оба столбца для вывода:

Затем необходимо перейти в режим SQL-запросов и после SELECT указать оператор DISTINCT должно получиться вот так:

Этот оператор убирает все повторяющиеся значения наборов полей, которые участвуют в данном SELECT-е.
После запуска этого запроса получим очищенный от дублей набор значений букв и цифр:

Далее приступаем к формированию запроса для подсчета числа строк с одинаковым значением в первом столбце, а так как на предыдущем шаге мы удалили дубли, то суммарное действие первого и второго запросов даст ответ на поставленную задачу — может ли в рамках одного значения первого столбца быть несколько разных значений из второго столбца. Для этого в конструкторе запросов берем первый запрос и выбираем оба столбца для вывода:

В контекстном меню выбираем Итоги:

Делаем группировку по первому столбцу, подсчет (Count) по второму и для второго же столбца в качестве условия отбора ставим «больше единицы»:

Запускаем запрос и получаем решение задачи:

Т.е. в нашем примере для BBB и CCC есть два различных значения во втором столбце. Если бы у нас была потребность определить разные значения какого-либо параметра не в рамках значений какого-то одного столбца, а в рамках группы значений разных столбцов, то, соответственно, группировку следовало бы указать для всех этих столбцов, а Count, как и в данном примере, только для подсчитываемого параметра.
В общем-то на этом все. Можно еще вывести информацию о том, какие именно разные значения второго столбца соответствуют BBB и CCC. Объединяем последний запрос с исходной таблицей:

Получаем:

PS
Чтобы было понятнее какого рода задачи можно решить таким методом, приведу пару примеров:
Пример 1. Номенклатурные позиции могут иметь различные единицы измерения (литры, килограммы и т.п.). Требуется выявить номенклатурные позиции с двумя и более альтернативными единицами измерения.
Пример 2. Закупался ли один и тот же товар по разной стоимости или стоимость была всегда одинакова?
Это первое что в голову пришло, на самом деле на практике таких примеров масса.
Успехов!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *