es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupar por con valores separados por comas y excluyendo el valor del valor de la columna anterior

Tengo dos tablas Lecturer y Student y me gustaría mostrar los otros ID de los conferenciantes en una nueva columna con valores separados por comas. Estoy usando SQL Server 2014.

Tabla: Lecturer

id name subject
102 Mark Designing
103 John Analytics
104 Jacob Science

Tabla: StudentLecturer

id Fname Lname Lid
1 Jack P 102
1 Jack P 103
1 Jack P 104

Al usar GROUP BY, obtengo un solo valor como se muestra a continuación:

SELECT id, fname, lname, lid 
FROM studentlecturer 
GROUP BY id

Tabla: StudentLecturer

id Fname Lname Lid
1 Jack P 102

Resultado esperado

id Fname Lname Lid Valor Concatenado
1 Jack P 102 103,104
1 Jack P 103 102,104
1 Jack P 104 102,103

SQL Fiddle: http://sqlfiddle.com/#!7/73304

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los ID de los otros profesores como valores separados por comas en una nueva columna, puedes usar la función STRING_AGG en SQL Server 2017 o versiones posteriores, o el método FOR XML PATH en SQL Server 2014. Aquí tienes un ejemplo de consulta que logra el resultado deseado:

    SELECT sl.id, sl.Fname, sl.Lname, sl.Lid,
        STUFF((SELECT ',' + CAST(Lid AS VARCHAR(10))
               FROM StudentLecturer
               WHERE id = sl.id AND Lid <> sl.Lid
               FOR XML PATH('')), 1, 1, '') AS ConcatValues
    FROM StudentLecturer AS sl
    JOIN Lecturer AS l ON sl.Lid = l.id
    

    Esta consulta une la tabla StudentLecturer con la tabla Lecturer utilizando la columna Lid. Luego, para cada fila en la tabla StudentLecturer, utiliza una subconsulta para concatenar los valores Lid de todos los otros profesores que enseñaron al mismo estudiante, separados por comas.

    La función STUFF se utiliza para eliminar la coma inicial de la cadena concatenada. La función CAST convierte el valor Lid a una cadena para la concatenación.

    Ten en cuenta que esta consulta asume que cada estudiante puede estar asociado con varios profesores, y que cada profesor tiene un ID único en la tabla Lecturer. Si hay varios estudiantes con el mismo ID en la tabla StudentLecturer, es posible que debas ajustar la consulta en consecuencia.

Comments are closed.