我正在尝试聚合一些教师数据(以便轻松地显示教师在一学期教授的课程),直到现在我已经接受了为每位教师提供多行。但是,如果我可以将教师的所有教学都放在一行中,那么对某些业务流程会有好处。这是一些示例数据(我的表有更多列,但总体思路不会有太大变化。
tbl_Instructors有:
N_ID | F_Name | L_Name
001 Joe Smith
002 Henry Fonda
003 Lou Reed
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
我想要回归的是:
N_ID | First_Name | Last_Name | Course_IDs
001 Joe Smith AAA, AAB
002 Henry Fonda CCC
003 Lou Reed DDD, FFF
我想我需要做一些事情,从tbl_Instructors中选择所有N_ID,然后通过连接从tbl_Courses返回Course_IDs,但这个神奇的步骤已经提到了我。有帮助吗?我可以通过SQL选择执行此操作还是需要使用VB?
答案 0 :(得分:12)
使用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;
考虑在两个表中将N_ID
的数据类型从文本更改为数字。如果这样做,那么在ConcatRelated()
表达式的第三个参数中不需要单引号。
"N_ID = " & [N_ID]
只要您需要N_ID
显示前导零,请使用Format()
表达式。
Format(N_ID, "000")