Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Agrupar distintas fechas en columnas

Estas en el tema de Agrupar distintas fechas en columnas en el foro de Mysql en Foros del Web. Buenas tardes Tengo una tabla mysql que registra la venta por día de de dos sucursales de la siguiente forma site|date|mount shop1|2012-04-04 08:05:02|10.5 shop1|2012-04-04 08:05:02|2.00 ...
  #1 (permalink)  
Antiguo 22/04/2012, 13:05
 
Fecha de Ingreso: junio-2005
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Agrupar distintas fechas en columnas

Buenas tardes

Tengo una tabla mysql que registra la venta por día de de dos sucursales de la siguiente forma

site|date|mount
shop1|2012-04-04 08:05:02|10.5
shop1|2012-04-04 08:05:02|2.00
shop2|2012-04 08:05:02|7.50
shop1|2012-04-05 08:05:02|6.00
shop1|2012-04-05 08:05:02|9.00
shop2|2012-04-06 08:05:02|10.00
shop2|2012-04-06 08:05:02|3.00

Quiero sacar un reporte que muestre los distintos días en forma de columna y las distintas sucursales en forma de fila

site|2012-04-04|2012-04-05|2012-04-06
shop1|12.50|13.00|0
shop2|7.50|0.00|13.00

Si alguien me puede ayudar como hacerlo mucho le agradecería
  #2 (permalink)  
Antiguo 23/04/2012, 10:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.080
Antigüedad: 10 años, 10 meses
Puntos: 443
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.
  #3 (permalink)  
Antiguo 23/04/2012, 11:39
 
Fecha de Ingreso: junio-2005
Mensajes: 27
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Agrupar distintas fechas en columnas

Gracias amigo, excelente respuesta

Etiquetas: agrupar, columnas, diustintas, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:25.