一张图片胜过千言万语,所以我会先告诉你我想要完成的事情:
这是一份代表9月份时间表的报告。
数据来自三个表:Employees,Employees_Shifts和Shifts。
Report的RecordSource属性使用以下查询来获取名称:
SELECT DISTINCT
Employees.Employee_ID, Employees.Last_Name, Employees.First_Name
FROM
Shifts
INNER JOIN
(Employees
INNER JOIN
Employees_Shifts ON Employees.Employee_ID = Employees_Shifts.Employee_ID)
ON Shifts.Shift_ID = Employees_Shifts.Shift_ID
WHERE
(((Shifts.Schedule_ID) = 1))
ORDER BY
Employees.Last_Name;
所以现在我处于一个非常棘手的部分,我需要用适当的数据填充所有文本框。每个文本框应该包含一个字母:A,B,C,D等。
这些中的每一个都是分配给任何给定Shift的字母“名称”。您可以在同一时间但在不同位置进行多次轮班。仅供参考,请注意标题中的“第1部分”。我打算制作第二份报告,详细介绍每个班次,你可以查看任何一天的字母名称。但这与这个特殊问题无关。
我需要以某种方式在数据库中查询Shifts表中的“指定”字段,以便我可以将所有字母:A,B,C,D等分配到相应的框中。
例如,这样的查询的输出可能如下所示:
Allen Nelli 3A,7B,10A,13A,14B,17B,19C,21A
Barlow_Steeves Donna 1A,3B,7A,13B,18A,23A,25A
Beno Wayne 1B,7B,8A,10A,14B,15C
数字/字母组合将代表日期和指定,以便我可以以某种方式将正确的字母分配到相应的文本框中。 我甚至不知道这是否完全可以使用SQL。我试着修补这个问题:
SELECT distinct
Employees.Employee_ID, Employees.Last_Name, Employees.First_Name,
Day(Shifts.Start_Date_Time) & Shifts.Designation AS Expr1
FROM
Shifts
INNER JOIN
(Employees
INNER JOIN
Employees_Shifts ON Employees.Employee_ID = Employees_Shifts.Employee_ID)
ON Shifts.Shift_ID = Employees_Shifts.Shift_ID
WHERE
(((Shifts.Schedule_ID) = 1));
然而,这给了我以下输出:
8 Allen Nelli 10A
8 Allen Nelli 13A
8 Allen Nelli 14B
etc.
我不希望每个员工多次出现在报告中。这就是我在原始查询中使用DISTINCT运算符的原因。
当然有一种方法可以查询这个数据库,以便我可以使用其ControlSource属性在每个文本框中分配相应的字母?或者甚至只是单独进行查询并使用vba代码将字母分配给每个文本框的Value属性?
任何协助/指示都将受到赞赏。
答案 0 :(得分:0)
我认为创建一个基于employeeid聚合班次指定的子查询对您有好处。使用employee表对此子查询执行内部联接。一旦汇总了名称,您就可以简单地使用聚合名称而不是“Shifts.Designation”。您可能还需要进行分组。