MS Access SQL, если строка (n) = строка (n-1)

Я разрабатываю БД доступа, где в одном из входных данных таблицы регулярно появляются дубликаты (что я в конечном итоге хотел бы) в первичном ключе из-за использования некоторого старого программного обеспечения по причинам, как показано ниже:

ID |   Fluid      |   Designer   |   Team        |
--------------------------------------------------
A  |   Water      |   John       |   Piping      |
A  |   Water      |   James      |   Piping      |
B  |   Steam      |   Sam        |   Piping      |
B  |   Steam      |   Sam        |   Modeling    |
C  |   Hydrogen   |   Joe        |   Piping      |
D  |   Steam      |   Joe        |   Piping      |

Дублирующий запрос со ссылкой на поле ID дает:

ID |   Fluid      |   Designer   |   Team        |
--------------------------------------------------
A  |   Water      |   John       |   Piping      |
A  |   Water      |   James      |   Piping      |
B  |   Steam      |   Sam        |   Piping      |
B  |   Steam      |   Sam        |   Modeling    |

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

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

ID |   Fluid      |   Designer   |   Team        |
--------------------------------------------------
A  |              |   John       |               |
A  |              |   James      |               |
B  |              |              |   Piping      |
B  |              |              |   Modeling    |

У меня очень мало опыта работы с SQL, но я провел некоторое время с использованием Visual Basic, поэтому я предполагаю, что некоторые критерии, такие как:

if(record(n)=record(n-1), display("")

Однако из моего базового понимания доступа и SQL я знаю, что соотнесение Visual Basic — это, безусловно, сравнение яблок с апельсинами.

У меня MS Access 2007-2010.


Изменить: сейчас изучаю нормализацию (извините, я новичок). Более подробно о моей проблеме с БД. Также обновлена ​​финальная таблица выше.

Как я считаю, что моя БД должна работать:

  1. Импорт данных из ПО (ежедневно). Получается таблица 1.
  2. Используйте дублирующий запрос, чтобы найти дубликаты в столбце ID. Это таблица 2.
  3. Используйте запрос для создания таблицы, в которой будут отображаться повторяющиеся идентификаторы вместе с соответствующим столбцом, который не дублируется.

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


person OriginalDisplayName    schedule 26.07.2018    source источник
comment
Вы должны нормализовать свою базу данных. Это избыточность, которая не идет вам на пользу.   -  person Lajos Arpad    schedule 26.07.2018
comment
Я бы посоветовал сначала нормализовать ваши данные. Первоначально я думал, что ID — это идентификатор Fluid, но Steam имеет ID B > и D. Я бы разделил Fluid, Designer и Team на отдельные таблицы, чтобы не было дублирования данных.   -  person Darren Bartrup-Cook    schedule 26.07.2018
comment
Не будет ли Steam иметь Sam и Joe в качестве дизайнеров в вашей финальной таблице, или дублирование основано только на ID? Когда вы говорите 30 полей, вы имеете в виду (ненавижу говорить это, говоря о базах данных) 30 столбцов?   -  person Darren Bartrup-Cook    schedule 26.07.2018
comment
@DarrenBartrup-Cook Да, я имею в виду 30 столбцов. Обновлен мой пост, чтобы быть (надеюсь) более полезным. Также я сделал ошибку в последней таблице, которую я обновил. Спасибо за ответы до сих пор, и я изучаю нормализацию.   -  person OriginalDisplayName    schedule 26.07.2018


Ответы (1)


Условное форматирование

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

В вашем сравнительном отчете я бы также сгруппировал по столбцу ID с заголовок группы, чтобы упростить визуальное разделение между группами.

Для формулы сравнения в отчете вы можете сравнить значения Min() и Max() для поля в группе. Если Min и Max совпадают, поля совпадают во всей группе. Если нет, вы можете выделить поле, используя условное форматирование.

введите здесь описание изображения

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

Скрытие повторяющихся значений

Другим подходом может быть скрыть повторяющиеся значения для последующих записей в группе. Это будет включать ту же концепцию группировки, но в отчете вы должны установить для свойства Hide Duplicates полей значение True. При таком подходе вы увидите полную запись вверху списка, но тогда поля последующих записей будут отображаться только при изменении значения.

введите здесь описание изображения

person AdamsTips    schedule 26.07.2018
comment
Фантастика, это действительно помогает. Большое спасибо. - person OriginalDisplayName; 27.07.2018