Могу ли я выполнить запрос в функции iif - PullRequest
1 голос
/ 05 марта 2011

Я хочу знать, могу ли я выполнить запрос в функции iif, используемой в базе данных ms access.Мой случай

Select field1,(iif(3<4,'Select * from tbl1','select * from tbl2')) from tblmain

Я сталкиваюсь с синтаксической ошибкой, когда пытаюсь выполнить такой запрос, в чем проблема

1 Ответ

3 голосов
/ 08 марта 2011

Что вы пытаетесь достичь, не ясно из вашего примера запроса.

Вы можете использовать функции 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>

...