如何将多个记录数据连接成一个记录?

时间:2015-11-05 21:16:19

标签: sql vba report ms-access-2010

一张图片胜过千言万语,所以我会先告诉你我想要完成的事情:

enter image description here

这是一份代表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属性?

任何协助/指示都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我认为创建一个基于employeeid聚合班次指定的子查询对您有好处。使用employee表对此子查询执行内部联接。一旦汇总了名称,您就可以简单地使用聚合名称而不是“Shifts.Designation”。您可能还需要进行分组。