Создание отчета, повторение в выводе отчета, Ms Access SQL - PullRequest
0 голосов
/ 03 мая 2011
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;

В этом запросе отображаются все специалисты, Последний экзамен, Последняя модель_Модели, Последний курс.

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 Access задания повторяются.Следовательно, вместо того, чтобы техник выполнил 3 работы, он показывает 12, например.Хотя при выполнении самого второго запроса результаты не повторяются.

Любая помощь?

1 Ответ

1 голос
/ 03 мая 2011

По понятным причинам я обычно не читаю SQL-запросы других людей, но ваш пример был очень хорошо отформатирован. Это проблема?

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

Эти 2 строки относятся ко второму подзапросу вашего первого запроса. У вас есть 1 поле индекса (Technician_ID), но 2 поля группировки (Technician_ID и Course_Level). Это приведет к результатам, как:

 Technician_ID Final_Exam_Level
 Bob           5
 Bob           4
 Nadine        5

Я рекомендую либо удалить Course_Level из Group By, либо добавить его в строку Select.

...