#sql #database #ms-access
Вопрос:
Краткое описание проблемы: Каждый номер партии связан с номером продукта. В зависимости от продукта на партии необходимо провести различные тесты. Если каждый тест завершен, я хочу «подписать» эту партию.
Моя проблема заключается в том, чтобы проверить, завершен ли каждый тест в пакете, и связать его результаты с запросом на обновление.
Я очень новичок в базах данных и SQL. Могу ли я решить свою проблему только с помощью SQL или мне нужно создать код макроса/vba?
=-=-=- РЕДАКТИРОВАТЬ: =-=-=-
таблицы:
-tblbatches: каждая новая созданная партия получает номер партии (текстовое поле), когда все тесты выполнены, партия подписывается, отмечая поле » Да » / «Нет».
-tbltestsperbatch: эта таблица автоматически назначает правильные тесты партии на основе ее номера продукта. Номер пакета (текстовое поле), идентификатор теста (числовое поле), Тест завершен (поле Да/Нет). Поэтому, когда партии требуется выполнить 5 тестов, создается 5 новых записей с тем же номером пакета, но с 5 разными идентификаторами Test_ID. Когда все 5 полей » Да » / » Нет «отмечены галочкой «ДА», tblBatches.При выходе необходимо автоматически поставить галочку «ДА».
tblbatches
номер партии | номер продукта | выход из системы |
---|---|---|
1 | 0001 | НЕТ |
2 | 0001 | НЕТ |
… | … | … |
tbltestsperbatch
номер партии | test_ID | Тест Завершен |
---|---|---|
1 | 1 | ДА |
1 | 2 | НЕТ |
… | … | … |
Теперь у меня есть рабочий SQL-код, который запускает запрос на обновление
UPDATE tblbatches
SET tblbatches.signout = Yes
WHERE batchnumber IN(
SELECT batchnumber
FROM( SELECT tbltestsperbatch.batchnumber,
SUM(IIF (Test_completed = no, 1, 0)) AS CountNO
FROM tbltestsperbatch
GROUP BY tbltestsperbatch.batchnumber)
WHERE CountNO = 0)
;
Является ли это эффективным способом выполнения этой задачи? Я использую 2 запроса на выбор, чтобы затем выполнить запрос на обновление. Я чувствую, что это должно быть проще сделать, но на данный момент не нашел лучшего решения.
Комментарии:
1. Вы имеете в виду количество записей вместо количества полей? Отредактируйте вопрос, чтобы показать примеры данных в виде текстовой таблицы. Я очень сомневаюсь, что необходимо сохранять эту информацию о «выходе». При необходимости можно рассчитать, завершена ли партия или нет. Если его можно рассчитать для действия ОБНОВЛЕНИЯ, его можно рассчитать в любое время. Если вы действительно хотите сохранить, я бы, вероятно, выполнил процедуру VBA, выполняющую инструкцию UPDATE.
2. Покажите все таблицы, связанные с этой проблемой, и для каждой из них перечислите соответствующие поля для этой проблемы: в противном случае мы не сможем понять вашу проблему. У вас есть таблица с перечнем тестов, которые должен пройти каждый продукт? У вас есть таблица с перечнем тестов, фактически пройденных каждой партией? Кроме того, объясните, что вы подразумеваете под «Выходом» из пакета: вы имеете в виду изменение значения поля «Выход» в записях «пакета», которые прошли все тесты, соответствующие этому product_id.
3. Обработка только тех записей, которые имеют TestComplete=NO, сделает ваш запрос более эффективным. Вы можете добиться этого, добавив предложение в раздел ГДЕ, вот так: ГДЕ (не завершено тестирование) и (номер пакета В ( ….))
4. Вы также можете повысить эффективность, добавив поле Выход в таблицу tbltestsperbatch. Таким образом, вы можете отфильтровать все записи, которые имеют SignOut = Да, используя простое условие WHERE.