【问题标题】:How to concatenate multiple record data into one record?如何将多条记录数据连接成一条记录?
【发布时间】:2016-02-06 21:36:01
【问题描述】:

一张图片胜过一千个字,所以我先向你展示我要完成的工作:

这是一份代表 9 月份时间表的报告。

数据来自三个表:Employees、Employees_Shifts 和 Shifts。

报告的 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 属性?

任何帮助/指导将不胜感激。

【问题讨论】:

    标签: sql vba report ms-access-2010


    【解决方案1】:

    我认为创建一个基于员工 ID 聚合轮班指定的子查询对您很有帮助。对此子查询与员工表进行内部联接。聚合名称后,您可以简单地使用聚合名称而不是“Shifts.Designation”。您可能还需要进行分组。

    【讨论】:

    • 我没有任何子查询经验,但尝试了以下子查询:SELECT Day(Shifts.Start_Date_Time) & Shifts.Designation & "," AS Expr1 FROM Shifts INNER JOIN (Employees INNER加入Employees_Shifts ONEmployees.Employee_ID =Employees_Shifts.Employee_ID)ON Shifts.Shift_ID =Employees_Shifts.Shift_ID;然而,再一次,我似乎无法制作一个带有多个连接名称的唱片节目。我想我需要一些关于子查询的帮助。预期可能的输出:1B,7B,8A,10A,14B,15C
    • 我在这个网站上找到了我的问题的答案:allenbrowne.com/func-concat.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2017-02-24
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多