将相关行的值合并为单个串联字符串值

Roc*_*mas 7 ms-access

我正在尝试聚合一些教师数据(以便轻松地显示教师在一个学期中教授的课程),直到现在我才接受为每位教师提供多行.但是,如果我可以将教师的所有教学都放在一行中,那么对某些业务流程会有好处.这是一些示例数据(我的表有更多列,但总体思路不会有太大变化.

tbl_Instructors有:

    N_ID | F_Name | L_Name
    001    Joe      Smith
    002    Henry    Fonda
    003    Lou      Reed
Run Code Online (Sandbox Code Playgroud)

tbl_Courses有:

    Course_ID | N_ID | Course_Info
    AAA         001    PHYS 1
    AAB         001    PHYS 2
    CCC         002    PHYS 12
    DDD         003    PHYS 121
    FFF         003    PHYS 224
Run Code Online (Sandbox Code Playgroud)

我想要回归的是:

    N_ID | First_Name | Last_Name | Course_IDs
    001    Joe          Smith       AAA, AAB
    002    Henry        Fonda       CCC
    003    Lou          Reed        DDD, FFF
Run Code Online (Sandbox Code Playgroud)

我想我需要做一些事情,从tbl_Instructors中选择所有N_ID,然后通过连接从tbl_Courses返回Course_IDs,但这个神奇的步骤已经提到了我.有帮助吗?我可以通过SQL选择执行此操作还是需要使用VB?

Han*_*sUp 13

使用Allen Browne的ConcatRelated()函数很容易.从该网页复制该功能并将其粘贴到Access标准代码模块中.

然后此查询将返回您要求的内容.

SELECT
    i.N_ID,
    i.F_Name,
    i.L_Name,
    ConcatRelated(
        "Course_ID",
        "tbl_Courses",
        "N_ID = '" & [N_ID] & "'"
        ) AS Course_IDs
FROM tbl_Instructors AS i;
Run Code Online (Sandbox Code Playgroud)

考虑N_ID在两个表中将文本的数据类型更改为数字.如果这样做,则不需要该ConcatRelated()表达式的第三个参数中的单引号.

"N_ID = " & [N_ID]
Run Code Online (Sandbox Code Playgroud)

每当您需要N_ID使用前导零显示时,请使用Format()表达式.

Format(N_ID, "000")
Run Code Online (Sandbox Code Playgroud)