2011-05-02 3 views
0
SELECT NMC.*, Exam.Final_Exam_Level 
FROM 
    (SELECT Technicians.Technician_ID AS Technician_ID, 
    Technicians.First_Name AS First_Name, 
    Technicians.Surname AS Surname, 
    MAX(New_Models.Date_Issued) AS Last_Course_Date, 
    MAX(New_Models.Issue) AS Last_Issue, 
    MAX(New_Models.Model_ID) AS Last_Model_ID, 
    Technicians.Course_Level AS No_Training_Courses 
    FROM New_Models, New_Models_Allocation, Technicians 
    WHERE New_Models.Model_ID=New_models_Allocation.Model_ID 
    And Technicians.Technician_ID=New_Models_Allocation.Technician_ID 
    GROUP BY Technicians.Technician_ID, Technicians.Course_Level, First_Name, Surname 
    ORDER BY MAX(New_Models.Model_ID) DESC) 
AS NMC 
INNER JOIN (SELECT Technicians.Technician_ID, COUNT(*) AS Final_Exam_Level 
    FROM Technicians, Exams, Exam_Allocation 
    WHERE (Technicians.Technician_ID)=Exam_Allocation.Technician_ID 
    And ((Exams.Exam_ID)=Exam_Allocation.Exam_ID) 
    And (Exams.Date_Taken)<=#12/31/2010# 
    GROUP BY Technicians.Technician_ID, Technicians.Course_Level 
    ORDER BY Technicians.Technician_ID) 
AS Exam ON Exam.Technician_ID=NMC.Technician_ID; 

이 쿼리는 각 기술자, 마지막 시험, 마지막 New_Model, 마지막 과정을 보여줍니다.보고서 만들기, 보고서 출력 반복, Ms Access SQL

SELECT Technicians.Technician_ID, Jobs.Job_ID, Jobs.Date_Occured, Fix 
FROM Technicians, Jobs, Tech_Allocation, Recovery 
WHERE Technicians.Technician_ID=Tech_Allocation.Technician_ID 
And Jobs.Job_ID=Tech_Allocation.Job_ID 
And Jobs.Job_ID=Recovery.Job_ID 
And Jobs.Date_Occured>=#1/1/2010# 
And Jobs.Date_Occured<=#12/31/2010# 
ORDER BY Fix; 

이 쿼리는 각 기술자가 수행 한 작업을 보여줍니다.

그러나 Ms 액세스에서 보고서를 만들면 작업이 반복됩니다. 따라서 기술자가 3 가지 작업을 수행하는 대신 12 가지를 표시합니다. 두 번째 쿼리 자체를 실행해도 결과는 반복되지 않습니다.

어떤 도움말이 필요합니까?

+0

(질문과 직접적인 관련이 없지만 여전히 문제가 될 수 있습니다.) 2010 년 모든 데이터를 캡처하려면 '<# 12/31/2010 #'을 사용했습니다. 그러나 이러한 날짜 필드에도 시간 부분이 저장되면 자정 이후 발생한 2010 년 12 월 31 일에 발생한 모든 이벤트가 제외됩니다. 대신 # 01/01/2011 # '을 사용하는 것이 좋습니다. 이해가 되니? – PowerUser

답변

1

분명히 다른 사람들의 SQL 쿼리는 읽지 않지만 사용자의 예제는 형식이 잘되어 있습니다. 이게 문제 야?

INNER JOIN (SELECT Technicians.Technician_ID, COUNT(*) AS Final_Exam_Level 
    ... 
    GROUP BY Technicians.Technician_ID, Technicians.Course_Level 

이 두 줄은 첫 번째 쿼리의 두 번째 하위 쿼리에서 가져온 것입니다. 1 개의 색인 필드 (Technician_ID)가 있지만 2 개의 그룹화 필드 (Technician_ID 및 Course_Level)가 있습니다. 결과는 다음과 같습니다.

Technician_ID Final_Exam_Level 
Bob   5 
Bob   4 
Nadine  5 

나는 Group By에서 Course_Level을 제거하거나 Select 행에 추가하는 것이 좋습니다.