ms access データベースで使用される iif 関数でクエリを実行できるか知りたいです。私の場合
Select field1,(iif(3<4,'Select * from tbl1','select * from tbl2')) from tblmain
そのようなクエリを実行しようとすると、構文エラーに直面しています
ms access データベースで使用される iif 関数でクエリを実行できるか知りたいです。私の場合
Select field1,(iif(3<4,'Select * from tbl1','select * from tbl2')) from tblmain
そのようなクエリを実行しようとすると、構文エラーに直面しています
達成しようとしていることは、サンプル クエリからは明らかではありません。
Access クエリで IIF 関数を使用できます。次に例を示します。
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 ステートメントを使用することはできませんが、そうではありません。
ここで何を達成しようとしているのかは私にはわかりませんが、提案する2つのオプションがあります。まず、代わりに 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 をチェックしている実際の条件に置き換えると、どちらか一方またはクエリからのみレコードが返され、両方から返されることはありません。ただし、これを行う必要がある場合、データベースに設計上の問題がある可能性があるのではないかと思います。これが必要になる疑わしいシナリオがたくさんあり、有効なシナリオはほとんどないと思いますが、それらは存在すると確信しています。