的我有一个先进的查询/报告,我需要帮助在Access 2007中创建 我需要生成的查询是:高级查询具有位逻辑
Employee Last, Employee First, Employee Role, Course Name, StartDate, EndDate, Attended
,我需要处理,这是逻辑:
- 如果用户已经出席了employeerole = courserole课程, 参加=是
- 如果用户还没有参加的课程与Employeerole = courserole, 出席=没有
- 如果用户没有参加并没有具有匹配 CourseRole课程,与该角色
一些额外的逻辑,这将是很好的将是添加出席=否课程:培训师最后选择
逻辑:如果数据是空的,训练员最后=没有训练员分配
它不会让我发布数据库的图片。因此,这里是参照Entegrity表格:
Tables: Fields
Employee: Employee_PK, Employee_Last, Employee_first, Employee_userid
Role: Role_PK, RoleNAme
EmployeeRole: EmployeeRole_PK, Employee_ID, Role_ID
Location: Location_PK, Location
Course: Course_PK, StartDate, EndDate, CourseName, CourseNotes, Location_ID
CourseAttendance: CourseAttendance_PK, Course_ID, Employee_ID
CourseRole: CourseRole_PK, Course_ID, Role_ID
Trainer: Trainer_PK, TrainerLast, TrainerFirst
TrainerCourse:Trainer_PK, Trainer_ID, Course_ID
所以,你可以看到它的标准化,并且有多到许多需要哪些
PK是主键,ID被用作外键许多表。所以是的,这些都没问题。
编辑:
该查询被张贴在评论:
我已经尝试了多个查询。
SELECT qryEmployeeCoursesForRole.*, IIf(IsNull([courseattendance_PK]),"No","Yes") AS Attended
FROM qryEmployeeCoursesForRole
LEFT JOIN CourseAttendance
ON (qryEmployeeCoursesForRole.COURSE_ID = CourseAttendance.COURSE_ID)
AND (qryEmployeeCoursesForRole.EMPLOYEE_ID = CourseAttendance.EMPLOYEE_ID);
这一个犯规处理没有规定当然除外 -
Course Table:
COURSE_PK START DATE END DATE COURSENAME NOTES LOCATION_ID
1 12/2/2012 12/2/2012 OTC No Notes 3
2 12/1/2012 12/1/2012 OTC No Note 2
3 1/5/2012 1/5/2012 Requistions Text Text Text 1
and P-Cards
CourseAttendance Table:
COURSEATTENDANCE_PK COURSE_ID EMPLOYEE_ID
1 1 1
2 2 2
CourseRole Table:
COURSEROLE_PK COURSE_ID ROLE_ID
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
Employee Table:
EMPLOYEE_PK EMPLOYEE_LAST EMPLOYEE_FIRST EMPLOYEE_USERID
1 Ables Christopher LG854
2 Ables Gary LC876
3 Ables Steven LQ875
EmployeeRole Table:
EMPLOYEEROLE_PK EMPLOYEE_ID ROLE_ID
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 4
Location Table:
LOCATION_PK LOCATION
1 New York
2 New Brunfels
3 Ontario
4 China
Role Table:
ROLE_PK ROLENAME
1 Service Coordinator
2 Service Planner
3 Service Entry
4 AP Invoice
Trainer Table:
TRAINER_PK TRAINER_LAST TRAINER_FIRST TRAINER_USERID
1 Brunet Janell
2 Gibson Jim hb476
3 Taylor Diana hblo7hg
TrainerCourse Table:
TRAINERCOURSE_PK TRAINER_ID COURSE_ID
1 1 1
2 1 2
3 2 2
现在,我已经在这个很多细节通过逻辑走到看来这需要的不仅仅是看中查询更多。如果你需要我更具体,我可以但它会要求我上传文件或其他东西。
所有查询我创建和原因查询:
EmployeeCourseOutsideofRole
SELECT CourseAttendance.EMPLOYEE_ID, CourseAttendance.COURSE_ID, Course.COURSE_NAME
FROM Course INNER JOIN (CourseAttendance LEFT JOIN qryEmployeeCoursesForRole ON
(CourseAttendance.COURSE_ID = qryEmployeeCoursesForRole.COURSE_ID) AND
(CourseAttendance.EMPLOYEE_ID = qryEmployeeCoursesForRole.EMPLOYEE_ID)) ON Course.COURSE_PK =
CourseAttendance.COURSE_ID
WHERE (((qryEmployeeCoursesForRole.EMPLOYEE_ID) Is Null) AND
((qryEmployeeCoursesForRole.COURSE_ID)
Is Null));
If Employee took a Course and the CourseRole not equal to EmployeeRole
EmployeeCoursesForRoleSub:
SELECT [Employee_last] & " " & [employee_first] AS FullName, Role.ROLENAME,
EmployeeRole.EMPLOYEE_ID, EmployeeRole.ROLE_ID
FROM Role INNER JOIN (Employee INNER JOIN EmployeeRole ON Employee.EMPLOYEE_PK =
EmployeeRole.EMPLOYEE_ID) ON Role.ROLE_PK = EmployeeRole.ROLE_ID;
This is a SubQuery only--for next
qryEmployeeCourseForRole:
SELECT qryEmployeeCoursesForRoleSub.*, CourseRole.COURSE_ID
FROM qryEmployeeCoursesForRoleSub LEFT JOIN CourseRole ON qryEmployeeCoursesForRoleSub.ROLE_ID =
CourseRole.ROLE_ID;
This shows courserole with matching employeerole--a subquery for next
EmployeeCourseForRoleWAttended:
SELECT qryEmployeeCoursesForRole.*, IIf(IsNull([courseattendance_PK]),"No","Yes") AS Attended
FROM qryEmployeeCoursesForRole LEFT JOIN CourseAttendance ON (qryEmployeeCoursesForRole.COURSE_ID =
CourseAttendance.COURSE_ID) AND (qryEmployeeCoursesForRole.EMPLOYEE_ID =
CourseAttendance.EMPLOYEE_ID);
个
用于调试
Employee Table:
Employee_PK Employee_Last Employee_First
Autonumber Daigle Jake
Autonumber Ryder Canen
Role Table:
Role_PK RoleName
5 Asset Shipper
6 Material Controller
7 Material MAnager
EmployeeRole Table:
EmployeeRole_PK Employee_ID Role_ID
Autonum Whatever Daigle is 5
Autonum Whatever Daigle is 1
Autonum Whatever Ryder is 5
Autonum Whatever Ryder is 6
Course Table:
Course_PK Course_Name Course_StartDate Course_EndDate
4 OTC 12/8/2011 12/9/2011
CourseRole Table:
CourseRole_PK Course_ID Role _ID
6 4 1
7 4 7
CourseAttendance:
CourseAttendance_PK Course_ID Employee_ID
Autonum 4 Whatever Daigle is
Autonum 4 Whatever Ryder is
确定附加采样数据I张贴的样本数据。如果用户参加了满足其角色之一的课程并且courserole = employeerole,那么问题就会发生,那么查询报告他们已经完成了他们的所有角色。
我需要在一个单一的报告内容:
员工姓,雇员的名字,角色1,CoureName,开始日期,结束日期,出席 但逻辑将需要在那里,因为我有它上市以上在帖子的开头。
有你的表有一些差异。首先,你在EmployeeRole中有一个名为Role_ID的字段,就是你的Role表中的Role_PK?另外在你EmployeeRole表Employee_ID员工表中的Employee_PK或Employee_userid? – Taryn 2012-01-05 15:34:56
编辑您的问题并发布一些示例数据将会有帮助 – Taryn 2012-01-05 15:47:15
大多数人在说样本数据时,都是指相关表格的一小部分被剪切并粘贴到问题中。 – Fionnuala 2012-01-05 16:29:34