Я пытаюсь выбрать запрос из числа строк более 2 на основе идентификатора, ДАТЫ и ОПЦИИ в MS Access.
поэтому, если в столбце параметров указано «НЕТ», запись более 2 не включена в мой код запроса sql.
Что-то не так с моим SQL-кодом?
поэтому мой пост отличается от ссылки ниже
Пожалуйста, направь меня
Стол Absen
Стол MASTERID
Я использовал этот результат кода SQL следующим образом:
SELECT a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID ON a.ID = MASTERID.ID
WHERE a.option is null and exists(select a.ID from ABSEN a2 where a.ID=a2.ID and a.DATE=a2.DATE group by a.ID and a.DATE and a.option having count(*) > 2)
ORDER BY a.ID, a.DATE, a.INOUT;
Результат из кода
Желаемый результат
Таблица Absen
для тестового ответа от @june7
Результат ответа @june7
Таблица Absen
для обновления ответов на тестирование от @june7 28-08-2024.
Стол MASTERID
с обновлением кода ответа
SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND m.POSITIONID ='STAFF' and a.ID & [Date] IN(SELECT ID & [Date] FROM ABSEN GROUP BY ID & [Date] HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;
Результат Обновление ответа (нет записи)
со старой публикацией кода
SELECT a.ID, MASTERID.NAMEID, a.Date, a.Time, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID ON a.ID = MASTERID.ID
WHERE (((MASTERID.POSITIONID)='STAFF') AND ((a.OPTION) Is Null) AND ((Exists (select a.ID from ABSEN a2 where a.ID=a2.ID and a.DATE=a2.DATE group by a.ID having count(*) > 2))<>False))
ORDER BY a.ID, a.Date, a.INOUT;
Результат публикации старого кода
@tinazmu, you want (5009, 29-Apr-2024) (three rows) to be excluded from your query because one or more of them has OPTION='NO'?
Если есть опция «НЕТ», то она не считается записью, число которой больше 2, например 5009, 29-Apr-2024
. Хорошо, я попробую
@tinazmu, я пробовал, но для (5009, 29 апреля 2024 г.) появляются 2 записи, но то, что я хочу (5009, 29 апреля 2024 г.), больше не появляется, потому что с помощью этого не более 2 записей колонка OPTION
@tinazmu, есть ли другое решение?, пожалуйста, помогите мне от вас
Почему вы использовали GROUP BY ID & [Date]
; вам следует использовать запятую ,
для разделения столбцов в GROUP BY. Ваше требование относительно OPTION мне непонятно. `не более 2-х записей с помощью столбца OPTION`; объясните, что это означает, немного подробнее (как вы используете столбец OPTION; пустые значения на самом деле NULL или пустые; как вы обрабатываете N, пустое, нулевое или любое другое значение?
@tinazmu, Why did you use GROUP BY ID & [Date] ; you should use comma , to separate columns in the GROUP BY.
Это with Code Answer update from june7
и код моего sql with old code posting
@tinazmu, Your requirement around OPTION is unclear to me.
это не более 2 записей с помощью столбца справки OPTION` Цель столбца опции со значением «НЕТ» состоит в том, чтобы объявить, что запись не выбирается снова в записи более 2, например 5009
с дата 29-Apr-24
сюда входит запись больше 2, поэтому, если в одной из моих записей используется столбец опций с «НЕТ», тогда статус записи больше 2 означает потерю
до сих пор не ясно: например, у вас нет ID: 5008 в желаемом выводе, почему?
@tinazmu, Потому что 5008
только две записи, не больше 2 и есть IN
и OUT
, так что это 5008
не двойная категория
@tinazmu, дело в том, что запись больше 2 с идентификатором и датой, но если она включает опцию «НЕТ», то запись уменьшается
Используйте 2 вложенных запроса и функцию IN():
SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND a.ID IN(SELECT ID FROM ABSEN GROUP BY ID HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;
На основе пересмотренных выборочных данных:
SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND a.ID & [Date] IN(SELECT ID & [Date] FROM ABSEN GROUP BY ID & [Date] HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;
Спасибо за ответ, но я пытаюсь добавить запись для ID 5011 With 28-Aug-24 with each in out
Но запись появилась после того, как я обновил ваш ответ.
Обновляю в посте Table Absen for testing answer from @june7
и Result from answer from @june7
Смотрите исправленный ответ.
Спасибо за ваш ответ. Я анализирую это в реальном доступе MS. Так что дайте мне время проанализировать и отметить ваши ответы, но не все они кажутся двойными. Пример m.NAMEID='A'
Если я использую условиеwhere, в которое я вставляю ваш код ответа SQL, это перед этим кодом a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
. Это такWHERE m.NAMEID='A' and a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
Извините, я не понимаю вашего комментария. Опубликованный мной запрос дает желаемый результат, показанный в вашем вопросе.
Извините за поздний ответ, за недопонимание. Вы можете увидеть это в файле MS Access, которым я поделился, по ссылке. Я делаю два запроса: recordcountmorethan2OLD
это в моей публикации и recordcountmorethan2frjune7
это ваш обновленный ответ. Итак, в результате вашего ответа на запрос есть запись, которая не включена, я не знаю, почему
Политика SO заключается в том, что вся информация для анализа проблемы должна быть под вопросом, а не загрузка файлов. Многие не будут скачивать с внешнего сайта. Можно опубликовать сообщение на дискуссионном форуме, где можно прикреплять файлы к сообщению.
Хорошо, я опубликовал таблицу тестирования, чтобы вы могли попробовать обновленные ответы и знать, в чем проблема Table Absen for testing answer update from @june7 28-08-2024
Вы хотите перечислить строки, если ID&DATE встречаются более двух раз (не считая строк с OPTION='N'):
SELECT a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a
INNER JOIN MASTERID
ON a.ID = MASTERID.ID
WHERE (SELECT COUNT(*)
FROM ABSEN AS a2
WHERE a.ID = a2.ID
and a.DATE = a2.DATE
and IIF(a2.OPTION IS NULL, '', a2.OPTION) <> 'NO'
) > 2
ORDER BY a.ID, a.DATE, a.INOUT;
Ваш ответ идеален, извините, что опоздал с ответом.
Чтобы уточнить: вы хотите, чтобы (5009, 29 апреля 2024 г.) (три строки) были исключены из вашего запроса, поскольку один или несколько из них имеют OPTION = 'NO'? Если да, просто измените GROUP в подзапросе EXISTS на «группировать по a.ID, a.DATE» (удалите OPTION и используйте запятые для разделения столбцов для группировки).