Я согласен с комментарием, вы должны рассмотреть проект на наличие альтернатив.
С точки зрения существующего дизайна мне представляется два варианта ...
1. Создайте строку запросав VBA, затем выполните его
2. Используйте оператор CASE в предложении WHERE
Признаюсь, я не знаю синтаксис Access, так что вот синтаксис SQL Server для вашего вдохновения ...
WHERE
CASE NumberOfCycles
WHEN 1 THEN s1
WHEN 2 THEN s2
WHEN 3 THEN s3
WHEN 4 THEN s4
END
IS NOT NULL
Это, однако, неэффективно, так как сканирует каждую запись и не может использовать индексы и т. Д.
РЕДАКТИРОВАТЬ
ТакжеОбратите внимание, что на основе вашего примера и фактического вопроса, если у вас когда-либо будет "NumberOfCycles = 3", но записи, в которых заполнены s3 и s4, возвращаются обе записи.
Я полагаю, вам будет рекомендовано иметь поле«цикл», который описывает цикл, в котором были заполнены данные.
Cycle | Number Of Cycles | s1 | s2 | s3 | s4
1 | 4 | 0 | - | - | -
2 | 4 | 0 | 1 | - | -
3 | 4 | 0 | 1 | 0 | -
4 | 4 | 0 | 1 | 0 | 1
Тогда вам просто нужно найти «Cycle = NumberOfCycles»
РЕДАКТИРОВАТЬ
Очевидно, что в Access есть ужасное выражение SWITCH..
WHERE
SWITCH(
NumberOfCycles=1, s1,
NumberOfCycles=2, s2,
NumberOfCycles=3, s3,
NumberOfCycles=4, s4
)
IS NOT NULL
Или вы можете перейти к ужасному выражению ИЛИ ...
WHERE
(NumberOfCycles=1 AND S1 IS NOT NULL)
OR (NumberOfCycles=2 AND S2 IS NOT NULL)
OR (NumberOfCycles=3 AND S3 IS NOT NULL)
OR (NumberOfCycles=4 AND S4 IS NOT NULL)