Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/04/2012, 09:01
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Agrupar distintas fechas en columnas

Hola Galarraga:

Lamentablemente en MySQL no existe el concepto de tablas PIVOT, como en ORACLE o en SQL Server, pero podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-------+---------------------+-------+
  3. | site  | date                | mount |
  4. +-------+---------------------+-------+
  5. | shop1 | 2012-04-04 08:05:02 | 10.50 |
  6. | shop1 | 2012-04-04 08:05:02 |  2.00 |
  7. | shop2 | 2012-04-04 08:05:02 |  7.50 |
  8. | shop1 | 2012-04-05 08:05:02 |  6.00 |
  9. | shop1 | 2012-04-05 08:05:02 |  9.00 |
  10. | shop2 | 2012-04-06 08:05:02 | 10.00 |
  11. | shop2 | 2012-04-06 08:05:02 |  3.00 |
  12. +-------+---------------------+-------+
  13. 7 rows in set (0.00 sec)
  14.  
  15. mysql> SELECT site,
  16.     -> SUM(CASE WHEN DATE(`date`) = '2012-04-04'
  17.     -> THEN mount ELSE 0 END) `2012-04-04`,
  18.     -> SUM(CASE WHEN DATE(`date`) = '2012-04-05'
  19.     -> THEN mount ELSE 0 END) `2012-04-05`,
  20.     -> SUM(CASE WHEN DATE(`date`) = '2012-04-06'
  21.     -> THEN mount ELSE 0 END) `2012-04-06`
  22.     -> FROM tabla
  23.     -> GROUP BY site;
  24. +-------+------------+------------+------------+
  25. | site  | 2012-04-04 | 2012-04-05 | 2012-04-06 |
  26. +-------+------------+------------+------------+
  27. | shop1 |      12.50 |      15.00 |       0.00 |
  28. | shop2 |       7.50 |       0.00 |      13.00 |
  29. +-------+------------+------------+------------+
  30. 2 rows in set (0.00 sec)

Checa también esta liga:

http://www.artfulsoftware.com/infotree/queries.php#78

Ahí hay infinidad de consultas que te pueden servir, la parte que te muestro es justamente la de convertir renglones a columnas.

Finalmente una recomendación con respecto a los nombres que usas en tus tablas: NO UTILICES PALABRAS EN INGLÉS, ya que estos pueden traer problemas, en tu ejemplo nombras un campo como DATE, sin embargo DATE es un TIPO DE DATO. Es preferible utilizar palabras en español para nombrar cualquier objeto de bd (campos, tablas, SP, funciones, etc) o en su defecto asegurar que no forman parte de las palabras reservadas.

Saludos
Leo.