Некоторые подробности: Query1 возвращает строки, которые являются дубликатами, за исключением значения DispositionID. Мне нужны только строки с наибольшим значением DispositionID.
Упрощенный пример:
Запрос Query1 возвращает:
DispositionID [Фамилия] [Имя]
0 Смит Боб
1422 Смит Боб
0 Александр Грант
0 Налбур Бетти
Что я хочу:
DispositionID [Фамилия] [Имя]
1422 Смит Боб
0 Александр Грант
0 Налбур Бетти
Спасибо за любые советы. Я ужасно заставляю работать агрегатные функции, и похоже, что использование псевдонима Q1 для Query1 внутри Query2 должно решить проблему, но я также не могу заставить это работать.
То, что я пробовал, и подробные фактические запросы:
Я изо всех сил пытался найти способ объединить следующие два запроса в один запрос, но когда я использую псевдонимы, я получить ошибки с SQL. Можно ли объединить эти 2 запроса в один запрос, или мне придется использовать 2 отдельных запроса?
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, но затем я получаю сообщение об ошибке в предложении WHERE Query2, что Access не может найти Q1. (Конечно, я изменяю ссылки в предложении WHERE с Query1 на Q1 перед выполнением комбинированного запроса SQL.)