2017-11-06 3 views
0

누군가가이 문제를 해결할 수 있기를 바랍니다. 동료와 저는 300 명이 넘는 직원의 교육을 추적하기위한 데이터베이스를 만들었습니다. 우리는 "진행 보고서"라는 보고서를 작성하여 일부 훈련에 대해 직원들의 2 년 80 시간 요구 사항에 대한 진행 상황을 보여주었습니다. 매년 또는 2 년 동안 수강해야하는 특정 교육이 있지만 진행 보고서에서 한 번만 계산해야합니다. 다음은 SQL 쿼리입니다.MS Access 보고서 쿼리에서 여러 레코드 중 하나만 선택하는 방법

SELECT [Employees Extended].Section, [Employees Extended].[Employee Name], Training.[Training Course], Training.Hours, Training.Category, Training.[Training Start Date], DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]") AS BGN, DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]") AS [END] 
FROM Training INNER JOIN ([Employees Extended] INNER JOIN Employees ON [Employees Extended].[Employee ID] = Employees.[Employee ID]) ON Training.[Employee ID] = Employees.[Employee ID] 
WHERE (((Training.Category)="Continuing Education") AND ((Training.[Training Start Date]) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR (((Training.[Training Course])="Privacy Training") AND ((Training.[Training Start Date]) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR (((Training.[Training Course])="Ethics Training") AND ((Training.[Training Start Date]) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR (((Training.[Training Course])="PRA Training") AND ((Training.[Training Start Date]) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))); 

이 쿼리는 내가 조회하여 작동하도록 만들 수있는 다른 것들로부터 모았습니다. 그러나, 나는 어떻게하면, 또는, 내가 필요한 결과를 얻을 필요가 있을지 모르겠다.

진행 보고서는 주로 "평생 교육"카테고리에서의 교육을위한 보고서입니다. 그러나 3 가지 필수 교육 (개인 정보 보호 교육, 윤리 교육 및 PRA 교육)도 필요합니다. 매년 또는 2 년마다이 세 가지 교육이 이루어집니다.

이미 세 가지 교육 중 하나만 수행해야하는 쿼리를 조정할 수있는 방법이 있습니까?

+0

좋은 ... 나는 그것을 해결할 수있었습니다. – Theo

+1

질문을 삭제하거나 직접 답변하십시오. 현재의 형태로, 미래의 독자에게는 문제가되지 않습니다. –

답변

0

이 질문을 게시 한 후 필자는 쿼리가 어려워 질 필요가 있음을 깨달았습니다. 나는 세 가지 테이블을 조인하여 이미 쿼리를 수행했을 때 필요한 정보를 얻었습니다. 그런 다음 MAX()를 사용하여 중복 레코드 중 하나를 가져오고 GroupBy를 사용하여 결과를 그룹화했습니다. 다시 말하지만, 저는 프로가 아니며, 이것이 이것이 가장 좋은 방법인지는 모르겠습니다.

SELECT [Training Extended (Test)].Section, [Training Extended (Test)].[Employee Name], [Training Extended (Test)].[Training Course], [Training Extended (Test)].Hours, [Training Extended (Test)].Category, Max([Training Extended (Test)].[Training Start Date]) AS [MaxOfTraining Start Date], DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]") AS BGN, DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]") AS [END] 
FROM [Training Extended (Test)] 
GROUP BY [Training Extended (Test)].Section, [Training Extended (Test)].[Employee Name], [Training Extended (Test)].[Training Course], [Training Extended (Test)].Hours, [Training Extended (Test)].Category 
HAVING ((([Training Extended (Test)].Category)="Continuing Education") AND ((Max([Training Extended (Test)].[Training Start Date])) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR ((([Training Extended (Test)].[Training Course])="Privacy Training") AND ((Max([Training Extended (Test)].[Training Start Date])) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR ((([Training Extended (Test)].[Training Course])="Ethics Training") AND ((Max([Training Extended (Test)].[Training Start Date])) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))) OR ((([Training Extended (Test)].[Training Course])="PRA Training") AND ((Max([Training Extended (Test)].[Training Start Date])) Between (DLookUp("[BeginDate]","[DateIntervals]","Date()>[DateIntervals]![BeginDate]")) And (DLookUp("[EndDate]","[DateIntervals]","Date()<[DateIntervals]![EndDate]")))); 
0

불행히도 ... 보고서의 추가 검토 후이 수정 프로그램이 작동하지 않았습니다. 내가 생각할 수있는 유일한 방법은 내가 포함시키려는 각 유형의 교육에 대한 쿼리를 작성한 다음 조합 쿼리를 작성하는 것입니다.

관련 문제