Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/09/2017, 15:20
Avatar de mortiprogramador
mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 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
  1. +----+------------+------------+------------+
  2. | id | rutalumno  | fecha      | asistencia |
  3. +----+------------+------------+------------+
  4. |  1 | 16089401-6 | 2017-09-04 |          1 |
  5. |  2 | 16089401-6 | 2017-09-05 |          1 |
  6. |  3 | 17490909-1 | 2017-09-04 |          1 |
  7. |  4 | 17490909-1 | 2017-09-05 |          1 |
  8. |  5 | 18355344-5 | 2017-09-04 |          0 |
  9. |  6 | 18355344-5 | 2017-09-05 |          1 |
  10. |  7 | 18498089-4 | 2017-09-04 |          1 |
  11. |  8 | 18498089-4 | 2017-09-05 |          1 |
  12. |  9 | 18541589-9 | 2017-09-04 |          1 |
  13. | 10 | 18541589-9 | 2017-09-05 |          1 |
  14. | 11 | 18925774-0 | 2017-09-04 |          1 |
  15. | 12 | 18925774-0 | 2017-09-05 |          1 |
  16. | 13 | 19056484-3 | 2017-09-04 |          0 |
  17. | 14 | 19056484-3 | 2017-09-05 |          0 |
  18. +----+------------+------------+------------+

Luego, con el query manual, da esto

Código SQL:
Ver original
  1. +------------+------------+------------+
  2. | rutalumno  | 2017-09-05 | 2017-09-04 |
  3. +------------+------------+------------+
  4. | 16089401-6 |          1 |          1 |
  5. | 17490909-1 |          1 |          1 |
  6. | 18355344-5 |          1 |          0 |
  7. | 18498089-4 |          1 |          1 |
  8. | 18541589-9 |          1 |          1 |
  9. | 18925774-0 |          1 |          1 |
  10. | 19056484-3 |          0 |          0 |
  11. +------------+------------+------------+

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 original
  1. SELECT @SQL;
  2. '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 original
  1. CONCAT(
  2.         'MAX(IF(Fecha= Fecha,Asistencia, NULL)) ',
  3.         Fecha
  4.     )
  5. -- Obteniendo
  6. '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