Sql 调用另外两个查询的查询

Sql 调用另外两个查询的查询,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我正在Access 2010数据库中编写一个查询,它调用同一Access 2010数据库中的另外两个查询。结果将是具有以下字段的表格报告: FirstName, LastName, HomePhone, ClientNumber, Level, nextDate, Type 客户/行列表由Query1生成,Query1还填充FirstName、LastName、HomePhone和Client Number。然后,Query2为上面第一个查询中定义的每个客户行填充Level、nextDate

我正在Access 2010数据库中编写一个查询,它调用同一Access 2010数据库中的另外两个查询。结果将是具有以下字段的表格报告:

FirstName, LastName, HomePhone, ClientNumber, Level, nextDate, Type 
客户/行列表由Query1生成,Query1还填充FirstName、LastName、HomePhone和Client Number。然后,Query2为上面第一个查询中定义的每个客户行填充Level、nextDate和Type

到目前为止,我得到的摘要查询是:

SELECT Query1.FirstName, Query1.LastName, Query1.HomePhone, Query1.ClientNumber, Query2.[Level], Query2.nextDate, Query2.Type 
FROM Query1 
INNER JOIN Query2 ON Query1.ClientNumber=Query2.ClientNumber;  
但是,当我尝试在“数据表”视图中查看此摘要查询的结果时,Access会显示一个对话框,询问Query2.ClientNumber,这表明代码中的某些内容没有正确引用该变量

以下是查询1的代码,以供参考:

SELECT ActiveCustomers.FirstName, ActiveCustomers.LastName, tblClientAddress.HomePhone, ActiveCustomers.ClientNumber 
FROM 
(
    SELECT Clients.ClientNumber, Clients.FirstName, Clients.LastName   
    (     
        SELECT COUNT(ReferralDate)      FROM IntakeTable      WHERE Clients.ClientNumber = IntakeTable.ClientNumber AND Len(ReferralDate & '') > 0   
    ) AS IntakeCount, 
    (     
        SELECT COUNT(ExitDate)      FROM ExitTable      WHERE Clients.ClientNumber = ExitTable.ClientNumber AND Len(ExitDate & '') > 0   
    ) AS ExitCount 
FROM Clients
)  AS ActiveCustomers  
INNER JOIN tblClientAddress ON ActiveCustomers.ClientNumber=tblClientAddress.ClientNumber
WHERE IntakeCount > ExitCount  AND tblClientAddress.CurrentResidence = True;  
下面是查询2的代码:

SELECT a.[Level], max(a.dte) AS nextDate, IIf([Type1Date]<[Type2Date],"t1","t2") AS [Type]
FROM (
    select [Level], Type1Date as dte
    FROM CommunicationTable WHERE ClientNumber=1  
    UNION
    select [Level], Type2Date as dte
    FROM CommunicationTable WHERE ClientNumber = 1  
)  AS a
GROUP BY a.[Level], IIf(a.[Type1Date]<a.[Type2Date],"t1","t2");  

选择一个[Level],max(a.dte)作为nextDate,IIf([Type1Date]当您加入并嵌套这样的查询时,它有助于描述哪些内容被“公开”给外部查询。
Query2
有一个嵌套的查询,
a
,它不公开
ClientNumber
,因此
Query2
不能(也不尝试)向联接公开
ClientNumber
。对
Query2
尝试此操作:

SELECT a.[Level], max(a.dte) AS nextDate, IIf([Type1Date]<[Type2Date],"t1","t2") AS [Type], a.ClientNumber
FROM (
    select [Level], Type1Date as dte, ClientNumber
    FROM CommunicationTable WHERE ClientNumber=1  
    UNION
    select [Level], Type2Date as dte
    FROM CommunicationTable WHERE ClientNumber = 1  
)  AS a
GROUP BY a.[Level], IIf(a.[Type1Date]<a.[Type2Date],"t1","t2");

选择[Level],max(a.dte)作为下一个日期,IIf([Type1Date]谢谢。+1提供了一个很好的建议。但它比这更细微。Query2表示其中ClientNumber=1。但是,WHERE条件中的ClientNumber值需要为每行更改,以便联接为Query1返回的每行列出填充值或空值。摘要查询现在输出空rows,但显示了所有7个字段的标签。您能建议一种方法来更改语法,用“WHERE ClientNumber=1”中Query1的变量替换1吗Query2的一部分?@CodeMed如您所述,
Query2
的子查询中的WHERE子句只返回
ClientNumber=1
的值。如果您想获得所有客户端的结果(ClientNumber值)您需要去掉那些WHERE子句并将ClientNumber添加到GROUPBY子句中。然后,
Query2
将返回所有客户端的行,您可以使用(现在可见)当您在其他查询中引用
Query2
时,ClientNumber字段将与其他表/查询联接。@GordThompson我想让您知道,非常感谢您的见解。谢谢。