MS Access SQL - 当 WHERE 语句引用第一个查询时如何合并 2 个查询
MS Access SQL - how to combine 2 queries when the WHERE statement references the first query
一些详细信息:Query1 returns 行重复,但 DispositionID 值除外。我只想要具有最高 DispositionID 值的行。
简化示例:
查询 1 returns:
DispositionID [姓氏] [名字]
0 史密斯 鲍勃
1422 史密斯 鲍勃
0 亚历山大 格兰特
0 纳布尔 贝蒂
我想要的:
DispositionID [姓氏] [名字]
1422 史密斯 鲍勃
0 亚历山大 格兰特
0 纳布尔 贝蒂
感谢您的指导。我很难让聚合函数正常工作,似乎在 Query2 中为 Query1 使用别名 Q1 应该可以解决问题,但我也无法正常工作。
我试过的和详细的实际查询:
我一直在努力想办法将以下 2 个查询组合成一个查询,但是当我使用别名时,SQL 出现错误。是否可以将这 2 个查询合并为一个查询,还是我必须使用 2 个单独的查询?
查询 1:
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]
查询 2:
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。)
根据您的简化示例,您似乎想要:
select max(DispositionID), [Last Name], [First Name]
from t
group by [Last Name], [First Name]
一些详细信息:Query1 returns 行重复,但 DispositionID 值除外。我只想要具有最高 DispositionID 值的行。
简化示例:
查询 1 returns:
DispositionID [姓氏] [名字]
0 史密斯 鲍勃
1422 史密斯 鲍勃
0 亚历山大 格兰特
0 纳布尔 贝蒂
我想要的:
DispositionID [姓氏] [名字]
1422 史密斯 鲍勃
0 亚历山大 格兰特
0 纳布尔 贝蒂
感谢您的指导。我很难让聚合函数正常工作,似乎在 Query2 中为 Query1 使用别名 Q1 应该可以解决问题,但我也无法正常工作。
我试过的和详细的实际查询:
我一直在努力想办法将以下 2 个查询组合成一个查询,但是当我使用别名时,SQL 出现错误。是否可以将这 2 个查询合并为一个查询,还是我必须使用 2 个单独的查询?
查询 1:
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]
查询 2:
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。)
根据您的简化示例,您似乎想要:
select max(DispositionID), [Last Name], [First Name]
from t
group by [Last Name], [First Name]