MS Access SQL - как объединить 2 запроса, когда оператор WHERE ссылается на первый запрос - PullRequest
0 голосов
/ 13 января 2020

Некоторые подробности: 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.)

1 Ответ

0 голосов
/ 13 января 2020

Исходя из вашего упрощенного примера, вы, вероятно, захотите:

select max(DispositionID), [Last Name], [First Name]
from t
group by [Last Name], [First Name]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...