Combine valores de filas relacionadas en un único valor de cadena concatenado

Resuelto RoccoMaxamas asked hace 12 años • 1 respuestas

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?

RoccoMaxamas avatar Nov 08 '12 04:11 RoccoMaxamas
Aceptado

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_IDde 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_IDque se muestre con ceros a la izquierda, utilice una Format()expresión.

Format(N_ID, "000")
HansUp avatar Nov 07 '2012 23:11 HansUp