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

Realizar una consulta y obtener datos con un formato

Estas en el tema de Realizar una consulta y obtener datos con un formato en el foro de Mysql en Foros del Web. Hola a todos hace tiempo que no tengo problemas con esto pero explico lo que estoy haciendo tengo dos tablas sql con la misma estructura ...
  #1 (permalink)  
Antiguo 18/12/2012, 15:46
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Realizar una consulta y obtener datos con un formato

Hola a todos hace tiempo que no tengo problemas con esto pero explico lo que estoy haciendo tengo dos tablas sql con la misma estructura una con 3,000 registros y otra 5,000 registros,cree una vista que une ambas tablas con un UNION ahí todo bien ahora bien
tengo que sacar reportes de esta vista por lo cual tengo la siguiente estructura

emisor | empresa |mes | saldo_pendientte
1 | uno |1 | 500000
1 | uno |1 | 5000
2 | dos |1 | 300000

asi sucesivamente para 8,000 registros

Tengo que hacer reportes de aquí con la siguiente estructura

emisor | Enero | Febrero | Marzo | Abril | Agosto| Noviembre | Diciembre
1 | 2000 | 30121 |5000 |6065|5450 |54068 |7000
2 | 4055 | 40121 |5000 |6065|5450 |54068 |7000
3 | 2089 | 80121 |5000 |6065|5450 |54068 |7000
4 | 3580 | 90121 |5000 |6065|5450 |54068 |7000

Compuedo hacerle no tengo idea estado tratado asi pero tengo error

Código MYSQL:
Ver original
  1. SELECT emisor, (SELECT sum(saldo_pendiente) AS enero FROM factura_general WHERE mes = 1 GROUP BY emisor )  FROM factura_general WHERE anio = 2012 GROUP BY emisor

Gracias
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #2 (permalink)  
Antiguo 18/12/2012, 17:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Realizar una consulta y obtener datos con un formato

Código MySQL:
Ver original
  1. SELECT emisor,
  2.      SUM(IF mes = 1, saldo_pendiente, 0) Enero,  
  3.      SUM(IF mes = 2, saldo_pendiente, 0) Febrero,
  4.      SUM(IF mes = 3, saldo_pendiente, 0) Marzo,
  5.      SUM(IF mes = 4, saldo_pendiente, 0) Abril,  
  6.      SUM(IF mes = 5, saldo_pendiente, 0) Mayo,  
  7.      SUM(IF mes = 6, saldo_pendiente, 0) Junio  
  8. FROM factura_general
  9. WHERE anio = 2012
  10. GROUP BY emisor

El resto complétalos tu.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/12/2012, 17:40
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Realizar una consulta y obtener datos con un formato

Hola muchas gracias si me sirvio el codigo bueno me ayudo a enteder mejor pero no se si algo mal pero solo me suma Enero (1) este es el codigo que ma paso gnzsoloyo y lo modifique

Código MySQL:
Ver original
  1. SELECT emisor,
  2. if( mes = 1 , sum(saldo_pendiente),0) as Enero,
  3. if( mes = 2 , sum(saldo_pendiente),0) as Febrero,
  4. if( mes = 3 , sum(saldo_pendiente),0) as Marzo,
  5. if( mes = 4 , sum(saldo_pendiente),0) as Abril,
  6. if( mes = 5, sum(saldo_pendiente),0) as Mayo,
  7. if( mes = 6 , sum(saldo_pendiente),0) as Junio,
  8. if( mes = 7 , sum(saldo_pendiente),0) as Julio,
  9. if( mes = 8 , sum(saldo_pendiente),0) as Agosto,
  10. if( mes = 9 , sum(saldo_pendiente),0) as Septiembre,
  11. if( mes = 10 , sum(saldo_pendiente),0) as Octubre,
  12. if( mes = 11 , sum(saldo_pendiente),0) as Noviembre,
  13. if( mes = 12 , sum(saldo_pendiente),0) as Diciembre
  14. FROM factura_general
  15. WHERE anio = 2012
  16. GROUP BY emisor

Pero todas las columnas de Febrero para adelante me sale 0 osea me manda una false la condicion y no se por que

Gracias
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #4 (permalink)  
Antiguo 18/12/2012, 18:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Realizar una consulta y obtener datos con un formato

No es una condición FALSE. Es que no hay registros donde el valor de mes esté entre 2 y 12.
¿Puedes mostrar un ejemplo de registros de esa tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/12/2012, 20:46
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Realizar una consulta y obtener datos con un formato

Si claro seria asi

Código HTML:
Ver original
  1. id_emisor   |   emisor  |   mes     |   saldo_pendiente
  2. 1           |   Uno     |   1       |       20
  3. 2           |   dos     |   1       |       50
  4. 3           |   tres    |   1       |       60
  5. 5           |   cinco   |   1       |       60
  6. 1           |   Uno     |   2       |       70
  7. 1           |   Uno     |   2       |       60
  8. 2           |   dos     |   3       |       80
  9. 2           |   dos     |   3       |       80
  10. 3           |   tres    |   4       |       100
  11. 3           |   tres    |   4       |       500

Entonces yo pienso cuando la consulta cuando se agrupan por emisor el mes queda 1 en todos; cuando hago los if solo encuentra el mes 1, por que cuando agrupo por emisor y mes si salen las cantidades de los demás meses pero se duplica el emisor 12 veces

Alguna idea muchas gracias

Saludos
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #6 (permalink)  
Antiguo 18/12/2012, 21:10
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Realizar una consulta y obtener datos con un formato

Atención, que no es lo mismo esto:
Código MySQL:
Ver original
  1. IF(mes = 1, SUM(saldo_pendiente), 0)
Que esto:
Código MySQL:
Ver original
  1. SUM(IF(mes = 1, saldo_pendiente, 0))
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 18/12/2012, 21:31
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Realizar una consulta y obtener datos con un formato

Excelente muchas gracias, era error humano osea mio, ya entendí mejor la lógica de lo que esto haciendo muchas gracias +1 :a rriba:

Saludos David y gnzsoloyo
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #8 (permalink)  
Antiguo 19/12/2012, 06:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Realizar una consulta y obtener datos con un formato

¡Oh!
No me había dado cuenta que en tu intento habías dado vuelta la lógica, y claro que en ese caso el SUM() no funciona, porque el agrupamiento se produce antes.
Eso te hace desaparecer todo, por ciertas características del GROUP BY en MySQL que no encontrarás en otros DBMS.
Ya me parecía raro que no funcionase bien...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/12/2012, 09:54
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Realizar una consulta y obtener datos con un formato

Muchas gracias todo salio bien ahora tengo otra duda

ya logre sacara el total por filas agregando un columna al final lo hice asi

Código MySQL:
Ver original
  1. SELECT id_emisor,emisor,
  2. sum(if( mes = 1 , saldo_pendiente,0)) Enero,
  3. sum(if( mes = 2 , saldo_pendiente,0))  Febrero,
  4. sum(if( mes = 3 , saldo_pendiente,0))  Marzo,
  5. sum(if( mes = 4 , saldo_pendiente,0))  Abril,
  6. sum(if( mes = 5 , saldo_pendiente,0))  Mayo,
  7. sum(if( mes = 6 , saldo_pendiente,0))  Junio,
  8. sum(if( mes = 7 , saldo_pendiente,0))  Julio,
  9. sum(if( mes = 8 , saldo_pendiente,0))  Agosto,
  10. sum(if( mes = 9 , saldo_pendiente,0))  Septiembre,
  11. sum(if( mes = 10 , saldo_pendiente,0))  Octubre,
  12. sum(if( mes = 11 , saldo_pendiente,0))  Noviembre,
  13. sum(if( mes = 12 , saldo_pendiente,0))  Diciembre,
  14. sum(if( mes = 1 , saldo_pendiente,0)) + sum(if( mes = 2 , saldo_pendiente,0))+sum(if( mes = 3 , saldo_pendiente,0)) + sum(if( mes = 4 , saldo_pendiente,0)) + sum(if( mes = 5 , saldo_pendiente,0))+sum(if( mes = 6 , saldo_pendiente,0)) +  sum(if( mes = 7 , saldo_pendiente,0)) + sum(if( mes = 8 , saldo_pendiente,0))+sum(if( mes = 9 , saldo_pendiente,0)) + sum(if( mes = 10 , saldo_pendiente,0)) + sum(if( mes = 11 , saldo_pendiente,0))+sum(if( mes = 12 , saldo_pendiente,0))  total
  15. FROM factura_general
  16. WHERE anio = 2012 and cobranza = 'VENCIDA'
  17. GROUP by emisor

No se si es la forma correcta de hacer esto ?

otra duda para agregar una fila igual que diga total y que sume cada una de las columnas por ejemplo que sume todo enero,y después febrero y asi se podría??

Gracias
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #10 (permalink)  
Antiguo 19/12/2012, 10:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Realizar una consulta y obtener datos con un formato

Cita:
otra duda para agregar una fila igual que diga total y que sume cada una de las columnas por ejemplo que sume todo enero,y después febrero y asi se podría??
Poderse... se puede, pero la consulta terminaría siendo completamente diferente.
Si lo que quieres es una columna final de suma, simplemente pon una columna que dica
Código MySQL:
Ver original
  1. SUM(saldo_pendiente) 'Total Pendiente'
Si lo que quieres hacer es tener esa misma suma como suma acumulativa, mas la suma final de todos los emisores, sería poner un GROUP BY así:
Código MySQL:
Ver original 
de lo contrario, yo te sugeriría que lo implementes en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 19/12/2012, 10:14
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: Realizar una consulta y obtener datos con un formato

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Poderse... se puede, pero la consulta terminaría siendo completamente diferente.
Si lo que quieres es una columna final de suma, simplemente pon una columna que dica
Código MySQL:
Ver original
  1. SUM(saldo_pendiente) 'Total Pendiente'
Si lo que quieres hacer es tener esa misma suma como suma acumulativa, mas la suma final de todos los emisores, sería poner un GROUP BY así:
Código MySQL:
Ver original 
de lo contrario, yo te sugeriría que lo implementes en la aplicación.
gnzsoloyo Muchas gracias :apla uso: era justamente lo que necesitaba desconocía esto de Mysql WITH ROLLUP muchas gracias ya con esto ya quedo muy bien :D

Saludos
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com

Etiquetas: formato, registros, select, sql, tabla
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 22:18.