假设您在MS Access中有两个表,Table1和Table2具有相同的结构(即相同的列)。我想写一个查询,如果Table1是空的,那么我必须从Table2获取数据,否则从Table1获取数据。
我不确定如何以这种方式使用IIF语句。
发布于 2014-08-25 02:30:28
这只是个想法。我的计算机上没有MS-Access,但SQL Server接受它:
SELECT Col1, Col2, ... FROM (
SELECT 1 AS TAG, Col1, Col2, ... FROM Table1
UNION
SELECT 2 AS TAG, Col1, Col2, ... FROM Table2) AS TBL_PARENT
WHERE TBL_PARENT.TAG = (SELECT MIN(TAG) FROM
(SELECT TOP 1 1 AS TAG FROM Table1
UNION
SELECT TOP 1 2 AS TAG FROM Table2) AS TBL)说明
如果Table1为空,则SELECT MIN(TAG)将返回2,否则返回1。然后,WHERE子句将筛选出属于所需表的所有行。之所以使用最外层的SELECT,是因为SQL Server不允许在WHERE子句中使用列别名(这里的别名是TAG)。因此,我们必须创建一个临时列,以便可以访问TAG列。
发布于 2014-08-25 04:12:00
由于您需要一些条件设置,并且MS Access不运行触发器或transact SQL,因此除了使用存储SQL查询或VBA SQL查询之外,还应考虑使用VBA。
当然,要确定将其放入哪个表单事件触发器--OnOpen、OnClick、AfterInsert、AfterUpdate:
IF DCount("ID", "Table1") = 0 Then
'VBA Recordset Query
db.OpenRecordset Table2sSQLString, dbOpenDynaset
'Stored SQL Query
DoCmd.OpenQuery "Table2Query"
Else
'VBA Recordset Query
db.OpenRecordset Table2SQLString, dbOpenDynaset
'Stored SQL Query
DoCmd.OpenQuery "Table1Query"
End Ifhttps://stackoverflow.com/questions/25474784
复制相似问题