Что вы пытаетесь достичь, не ясно из вашего примера запроса.
Вы можете использовать функции IIF в запросах Access, например:
SELECT IIF([SomeField]<15, "Smaller than 15", "Greater than!") As Whatever
FROM myTable
Вы также можете использовать подвыборы в Access, например (пример бесстыдно украденного из http://allenbrowne.com/subquery-01.html):
SELECT MeterReading.ID, MeterReading.ReadDate, MeterReading.MeterValue,
(SELECT TOP 1 Dupe.MeterValue
FROM MeterReading AS Dupe
WHERE Dupe.AddressID = MeterReading.AddressID
AND Dupe.ReadDate < MeterReading.ReadDate
ORDER BY Dupe.ReadDate DESC, Dupe.ID) AS PriorValue
FROM MeterReading;
Обратите внимание, что указанный запрос на выборку должен быть гарантированно возвращать одну запись - либо путем указания TOP 1, либо с помощью агрегатной функции - и должен ссылаться на родительский запрос в предложении WHERE.
Вы не можете использовать утверждение IIF так, как пытаетесь в своем вопросе, даже если ваш подвыбор был действительным, а это не так.
Можно предложить два варианта, хотя мне не совсем понятно, чего вы здесь добиваетесь. Во-первых, вы можете рассмотреть возможность сделать это в VBA. Что-то вроде:
const query1 As String = "Select * from tbl1"
const query2 As String = "select * from tbl2"
Dim recset as DAO.Recordset
set recset = CurrentDB.OpenRecordset(iif(3<4, query1, query2))
В качестве альтернативы, если и tbl1, и tbl2 имеют одинаковые поля, вы можете сделать что-то вроде этого:
SELECT * FROM tbl1 WHERE 3<4
UNION ALL
SELECT * FROM tbl2 WHERE NOT (3<4)
Если вы замените 3 <4 фактическим условием, которое вы проверяете, вы получите только записи из одного или другого или запроса, но не из обоих. Однако я подозреваю, что если вам нужно сделать это, у вашей базы данных могут быть проблемы с дизайном - я могу вспомнить много сомнительных сценариев, где это потребуется, и несколько действительных, хотя я уверен, что они существуют. </p>