Consulta SQL Interesante, sub consulta, case y concatenas filas en un solo resultado en MySQL

Les comparto y guardo aquí mi consulta, la cual me parece interesante, por el hecho de usar sub consultas, y algo que muchos tienen duda, ¿Como mostrar restados que están en filas, concatenado para que sea una?, en este caso para no repetir los registros según los días de la clase, mejor los agrupe en un solo resultado.

Otro ejemplo de uso en esta consulta es el uso de un switch case o switch, asi como de la función trim, que elimina los espacios en blanco al inicio y final de una cadena, en este caso para el nombre del aula tiene espacio al final, por eso me veo en la necesidad de usarla.

Resultado de la consulta, haciendo énfasis en la última columna del horario
SELECT g.periodo, g.rfc, g.exclusivo_carrera, 
	(SELECT creditos_materia FROM materias_carreras WHERE materia = m.materia AND carrera = g.exclusivo_carrera) creditos, 
	o.descripcion_area, 
	CONCAT( p.nombre_empleado, ' ', p.apellidos_empleado) AS profesor, 
	m.materia, m.nombre_completo_materia, 
	g.exclusivo_reticula , 
	g.grupo, 
	g.alumnos_inscritos, 
	g.paralelo_de,
	(SELECT DISTINCT GROUP_CONCAT( 
			(CASE 
			   WHEN dia_semana = 2 THEN 'Lu' 
			   WHEN dia_semana = 3 THEN 'Ma' 
			   WHEN dia_semana = 4 THEN 'Mi' 
			   WHEN dia_semana = 5 THEN 'Ju' 
			   WHEN dia_semana = 6 THEN 'Vi' 
			   WHEN dia_semana = 7 THEN 'Sa'                   
			  END) , '-', TRIM(aula), ' de ', DATE_FORMAT(hora_inicial, '%H'), ' a ' ,DATE_FORMAT(hora_final, '%H'), ' ') AS horario 
		FROM horarios 
		WHERE grupo = g.grupo AND materia = g.materia
	) AS horario
	FROM grupos g
		INNER JOIN materias m ON g.materia = m.materia
		INNER JOIN organigrama o ON o.clave_area = m.clave_area
		LEFT JOIN personal p ON g.rfc = p.rfc
	LIMIT 2000

Leave a Reply

Your email address will not be published. Required fields are marked *