Устранение дубликатов в результатах запроса доступа - PullRequest
0 голосов
/ 03 мая 2019

У меня есть база данных доступа с записями, экспортированными из нашей системы управления инцидентами.Я пытаюсь решить дублирующую проблему подсчета, связанную с тем, как мы подсчитываем инциденты.Подсчет в порядке, если у нас есть один оператор для каждого инцидента.У меня возникла проблема со случаем использования, когда в управлении транспортным средством участвуют два оператора, или в другом случае, когда у нас произошел инцидент, когда два оператора сталкиваются друг с другом.За любой инцидент Оператор получает плату, которую можно избежать или которую нельзя избежать.В случае инцидента в любом из дублирующих случаев Оператору А может быть предъявлено обвинение в Избегаемом, а в операторе В - Невозможный.Однако на макроуровне мы рассматриваем это как один инцидент, хотя у нас есть две записи в базе данных с обвинениями для обоих операторов.

Пример данных

Incident_Number EmpName IncType Charge_1
1A  Joe     Collision   Avoidable
1B  Tom     Collision   Avoidable
1B  Sue     Collision   Unavoidable
1C  Harry   Collision   Avoidable
1C  John    Collision   Unavoidable
1C  Kathi   Collision   Unavoidable
1D  Larry   Collision   Unavoidable

Пример того, как я хотел бы получитьрезультаты запроса

Incident_Number EmpName IncType Charge_1
1A  Joe     Collision   Avoidable
1B  Tom     Collision   Avoidable
1C  Harry   Collision   Avoidable
1D  Larry   Collision   Unavoidable

Пытаясь заставить это работать, я попробовал этот тест, но он не предотвратил дубликаты.Является ли наша проблема только в том, как мы храним наши данные?Должен ли я попробовать DISTINCT для столбца Charge_1?

SELECT *
FROM tst2019 as c1 
WHERE Incident_Number <> 
 (SELECT MAX(Incident_Number) FROM tst2019 as c2 
  WHERE c2.charge_1=c1.charge_1);

1 Ответ

0 голосов
/ 03 мая 2019

Густав, Вот как я использовал ваше решение:

SELECT 
    Incident_Number, 
    Date_of_Incident, 
    Mode, 
    Incident_Type, 
    charge_1, 
    First(employee_name) AS empname,
    Division
FROM 
    tst2019
GROUP BY 
    Incident_Number, 
    Date_of_Incident, 
    Mode, 
    Incident_Type,
    Charge_1,
    Division;

У меня действительно была одна аномалия, хотя для случая канатной дороги, где эксплуатация транспортного средства требует двух сотрудников. Для одного и того же номера инцидента в результатах запроса была 1 строка для Avoidable и 1 строка для Unavoidable. Кроме того, это работает именно так, как я хотел бы, так что спасибо за помощь.

В худшем случае, я всегда мог сделать ручную проверку на наличие инцидентов на канатной дороге. Вопрос: имеет ли смысл запускать sql-запрос, специфичный для «Avoidables», а затем делать второй запрос на добавление, специфичный для «Unavoidables», но при этом запрос опускает любой результат, если номер инцидента уже существует в исходном «Avoidable» -запросе Результаты. Если это возможно, могли бы вы дать некоторые рекомендации о том, как это можно сделать? Еще раз спасибо за вашу помощь в решении этой проблемы дубликатов.


Вы должны сгруппировать по Incident_Number :

SELECT 
    Incident_Number,
    First(EmpName) As Operator,
    IncType,
    Min(Avoidable) As Status
FROM 
    tst2019
GROUP BY
    Incident_Number,
    IncType

Обратите внимание, что FIRST просто выбирает оператор "a", а не обязательно "first", поскольку ничто в вашей таблице не определяет, кто / что является первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...