sql >> Base de Datos >  >> RDS >> Mysql

columnas dinámicas usando consulta de tabla dinámica

Hasta donde yo sé, no puede agregar columnas dinámicamente a una instrucción SELECT. Lo que está pidiendo es una forma de presentar datos y eso no es algo que le importe a MySQL. Deberías encargarte de eso desde el principio.

Sin embargo, puede hacer trampa creando sus consultas en su modelo y agregando dinámicamente esas nuevas columnas, insertando dinámicamente más MAX(case... a la cadena de consulta. Sin embargo, esa no es una buena solución.

Editar:

Entonces, supongo que estás hablando de la solución fea. Bueno, básicamente deberías crear dinámicamente tu cadena de consulta (pseudocódigo):

$initialDay = 02/28/2012;
$lastDay = 03/28/2012;
$dayNumber = 1;
$sql = 'Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id';
while ($initialDay <= $lastDay) {
    $sql .= ', MAX(case WHEN week = $initialDay then present end) as day' . $dayNumber;
    $initialDay = $initialDay + 1 day;
    $dayNumber++;
}
$sql .= ' From attendance blah blah...';

Entonces su consulta debería tener este aspecto para las fechas del 18/02/2012 al 18/03/2012:

Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id,
,MAX(case WHEN week = '02/18/2012' then present end) as day1
,MAX(case WHEN week = '02/19/2012' then present end) as day2
From attendance
LEFT JOIN cadet_record ON cadet_record.stud_no = attendance.student_id WHERE section = '$section' AND schoolyear = '$year' AND component = '$component' AND semester = '$semester'

GRUPO POR id_estudiante

Observe que agregué días en lugar de semanas porque su ejemplo mostró días crecientes, aunque el nombre de la columna era semanas