MS Access SQL-当WHERE语句引用第一个查询时,如何合并2个查询

问题描述 投票:0回答:1

某些详细信息:Query1返回除DispositionID值以外重复的行。我只想要具有最高DispositionID值的行。

简化示例:Query1返回:DispositionID [姓氏] [名字]0斯密斯(Smith)鲍勃(Bob)1422史密斯(Smith)鲍勃(Bob)0亚历山大·格兰特(Grant)0。。。。。。。。。。。。。。。。。。。。。。。。。。。

我想要的是:

DispositionID [姓氏] [名字]1422史密斯(Smith)鲍勃(Bob)0亚历山大·格兰特(Grant)0。。。。。。。。。。。。。。。。。。。。。。。。。。。

感谢您的指导。我很难使聚合函数正常工作,并且似乎在Query2的Query1中使用Q1的别名可以解决问题,但我也无法正常工作。

我尝试过的内容和详细的实际查询:

我一直在努力寻找一种将以下两个查询合并为一个查询的方法,但是当我使用别名时,SQL会出错。是否可以将这两个查询合并为一个查询,还是我必须使用两个单独的查询?

Query1:

SELECT tblCLient_Dispositions.DispositionID, tblClients.[Last Name], tblClients.[First Name], tblClients.[Date of Contact], tblCLient_Dispositions.StartDate, tblCLient_Dispositions.DispositionStatusID, tblStudentStatus.StudentStatus, tblStudentStatus.StudentProfessor, tblStudentStatus.ProfessorEmail, (SELECT COUNT(*) 
      FROM 
(
SELECT tblClient_Disp_Appointments.DispositionID, 
tblClient_Disp_Appointments.ApptTypeID, 
tblClient_Disp_Appointments.ApptStatusID, 
tblClient_Disp_Appointments.ApptDate, 
tblroomSchedule.RoomID 
FROM (tblClient_Disp_Appointments  
LEFT JOIN tblroomSchedule ON tblClient_Disp_Appointments.AppointmentID = tblroomSchedule.ApptID) 
WHERE (RoomID <> 6) 
AND (ApptTypeID = 23 OR ApptTypeID = 18 OR ApptTypeID = 3 OR ApptTypeID = 11 OR ApptTypeID = 6 OR ApptTypeID = 19 OR ApptTypeID = 2) 
AND (ApptStatusID = 3)
)
WHERE (DispositionID = tblCLient_Dispositions.DispositionID) 
     ) AS SessionsCompleted, tblStudentStatus.SessionsRequired, CDate(forms!frmProfessorReport.tbxStartingDate) AS WhatYear
FROM (tblCLient_Dispositions LEFT JOIN tblClients ON tblCLient_Dispositions.ClientID = tblClients.ClientID) LEFT JOIN tblStudentStatus ON tblClients.University_Student = tblStudentStatus.StudentStatusID
WHERE (((tblClients.University_Student)=[forms]![frmProfessorReport].[cbxWhichClass]) AND ((Nz(Year([tblCLients].[Date of Contact]),Year([forms]![frmProfessorReport].[tbxStartingDate])))=Year([forms]![frmProfessorReport].[tbxStartingDate])))
ORDER BY tblClients.[Last Name]

UNION

SELECT 0 AS DispositionID, tblClients.[Last Name], tblClients.[First Name], tblClients.[Date of Contact], Null AS StartDate, 0 AS DispositionStatusID, tblStudentStatus.StudentStatus, tblStudentStatus.StudentProfessor, tblStudentStatus.ProfessorEmail, 0 AS SessionsCompleted, tblStudentStatus.SessionsRequired, CDate(forms!frmProfessorReport.tbxStartingDate) AS WhatYear
FROM tblClients LEFT JOIN tblStudentStatus ON tblClients.University_Student = tblStudentStatus.StudentStatusID
WHERE (((tblClients.University_Student)=[forms]![frmProfessorReport].[cbxWhichClass]) 
     AND ((Nz(Year([tblCLients].[Date of Contact]),Year([forms]![frmProfessorReport].[tbxStartingDate])))=Year([forms]![frmProfessorReport].[tbxStartingDate])))
ORDER BY tblClients.[Last Name]

Query2:

SELECT * 
FROM Query1 
WHERE DispositionID = (SELECT MAX(DispositionID) FROM Query1 AS lookup WHERE lookup.[Last Name] & lookup.[First Name] & lookup.[Date of Contact] = Query1.[Last Name] & Query1.[First Name] & Query1.[Date of Contact])

[我想做的是将Query1粘贴到“ Query1”中,其中Query2说“ FROM Query1”,然后为其赋予别名Q1,但是随后在Query2的WHERE子句中出现错误,Access无法找到Q1。 (当然,在运行组合查询SQL之前,我将WHERE子句中的引用从Query1更改为Q1。)

某些详细信息:Query1返回除DispositionID值以外重复的行。我只想要具有最高DispositionID值的行。简化示例:Query1返回:...

sql ms-access aggregate-functions ms-access-2016
1个回答
0
投票

根据您的简化示例,您似乎想要:

select max(DispositionID), [Last Name], [First Name]
from t
group by [Last Name], [First Name]
© www.soinside.com 2019 - 2024. All rights reserved.