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
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étodoFOR XML PATH
en SQL Server 2014. Aquí tienes un ejemplo de consulta que logra el resultado deseado:Esta consulta une la tabla
StudentLecturer
con la tablaLecturer
utilizando la columnaLid
. Luego, para cada fila en la tablaStudentLecturer
, utiliza una subconsulta para concatenar los valoresLid
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ónCAST
convierte el valorLid
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 tablaStudentLecturer
, es posible que debas ajustar la consulta en consecuencia.