Combine valores de filas relacionadas en un único valor de cadena concatenado
Estoy tratando de agregar algunos datos del instructor (para mostrar fácilmente qué cursos impartió un instructor en un semestre) y hasta ahora acepté tener varias filas para cada instructor. Sin embargo, sería beneficioso para algunos procesos comerciales si pudiera tener toda la enseñanza de un instructor en una sola fila. Aquí hay algunos datos de ejemplo (mis tablas tienen muchas más columnas, pero la idea general no cambiará mucho.
tbl_Instructors tiene:
N_ID | F_Name | L_Name
001 Joe Smith
002 Henry Fonda
003 Lou Reed
tbl_Courses tiene:
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
Lo que quiero devolver es:
N_ID | First_Name | Last_Name | Course_IDs
001 Joe Smith AAA, AAB
002 Henry Fonda CCC
003 Lou Reed DDD, FFF
Creo que necesito hacer algo para seleccionar todos los N_ID de tbl_Instructors y luego devolver los Course_ID de tbl_Courses mediante concatenación, pero ese paso mágico me ha aludido. ¿Alguna ayuda? ¿Puedo hacer esto a través de selecciones SQL o tendré que usar VB?
Esto es fácil usando la función ConcatRelated() de Allen Browne . Copie la función de esa página web y péguela en un módulo de código estándar de Access.
Entonces esta consulta devolverá lo que solicitó.
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;
Considere cambiar el tipo de datos N_ID
de texto a numérico en ambas tablas. Si haces eso, no necesitas las comillas simples en el tercer argumento de esa ConcatRelated()
expresión.
"N_ID = " & [N_ID]
Y siempre que necesite N_ID
que se muestre con ceros a la izquierda, utilice una Format()
expresión.
Format(N_ID, "000")