
13/09/2017, 15:20
|
 | Colaborador | | Fecha de Ingreso: septiembre-2009 Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 6 meses Puntos: 214 | |
Respuesta: tabla dinamica, GROUP_CONCAT Vale, pues entiendo que la estructura inicial de la tabla es esta.
Código SQL:
Ver original+----+------------+------------+------------+ | id | rutalumno | fecha | asistencia | +----+------------+------------+------------+ | 1 | 16089401-6 | 2017-09-04 | 1 | | 2 | 16089401-6 | 2017-09-05 | 1 | | 3 | 17490909-1 | 2017-09-04 | 1 | | 4 | 17490909-1 | 2017-09-05 | 1 | | 5 | 18355344-5 | 2017-09-04 | 0 | | 6 | 18355344-5 | 2017-09-05 | 1 | | 7 | 18498089-4 | 2017-09-04 | 1 | | 8 | 18498089-4 | 2017-09-05 | 1 | | 9 | 18541589-9 | 2017-09-04 | 1 | | 10 | 18541589-9 | 2017-09-05 | 1 | | 11 | 18925774-0 | 2017-09-04 | 1 | | 12 | 18925774-0 | 2017-09-05 | 1 | | 13 | 19056484-3 | 2017-09-04 | 0 | | 14 | 19056484-3 | 2017-09-05 | 0 | +----+------------+------------+------------+
Luego, con el query manual, da esto
Código SQL:
Ver original+------------+------------+------------+ | rutalumno | 2017-09-05 | 2017-09-04 | +------------+------------+------------+ | 16089401-6 | 1 | 1 | | 17490909-1 | 1 | 1 | | 18355344-5 | 1 | 0 | | 18498089-4 | 1 | 1 | | 18541589-9 | 1 | 1 | | 18925774-0 | 1 | 1 | | 19056484-3 | 0 | 0 | +------------+------------+------------+
Hasta aquí, ¿Voy bien, o hay algo distinto en los datos de la tabla?
Ya me dirás.
Ahora, revisemos esto
Código SQL:
Ver originalSELECT @SQL; 'MAX(IF(Fecha = \',\nFecha,\n\', Asistencia, NULL)) AS 2017-09-04,MAX(IF(Fecha = \',\nFecha,\n\', Asistencia, NULL)) AS 2017-09-05'
Como puedes ver, la estructura que trae no es la deseada.
Lo más cercano podría ser algo así:
Código SQL:
Ver originalCONCAT( 'MAX(IF(Fecha= Fecha,Asistencia, NULL)) ', Fecha ) -- Obteniendo 'MAX(IF(Fecha = Fecha,Asistencia, NULL)) 2017-09-04,MAX(IF(Fecha = Fecha,Asistencia, NULL)) 2017-09-05'
Pero en cualquiera de los dos casos, se sigue teniendo un problema,
y es el alias que no encierra entre comillas.
Aunque habrá que ver si implementando esto en un sp o función
mejore el asunto.
En todo caso, se me ocurren dos soluciones más, y son:
1. Si todo se hace con un gestor de bd,
crear una función o un store procedure donde
se hagan ciclos para armar todos los días
que se quieran consultar (claramente tendría que recibir la fecha inicio
y la fecha fin, y luego que los ciclos tengan en cuenta estos datos)
2. Si este query esta asociado a una aplicación,
entonces que sea la aplicación con el lenguaje que
este manejando la encargada de crear el query dinámico,
y que una vez armado lo envie hacia la bd para ejecutarse
Espero que alguna idea sea de utilidad.
__________________ "Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com |