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

[SOLUCIONADO] Consulta condicional

Estas en el tema de Consulta condicional en el foro de Mysql en Foros del Web. Tengo una tabla que tiene los campos: Código PHP: codigo ,  cargo ,  abono  los cuales se repiten. Quiero seleccionar los saldos por código. Hice ...
  #1 (permalink)  
Antiguo 30/07/2015, 16:51
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Consulta condicional

Tengo una tabla que tiene los campos:
Código PHP:
codigocargoabono 
los cuales se repiten.
Quiero seleccionar los saldos por código.
Hice esto:
Código MySQL:
Ver original
  1. SELECT codigo, SUM( cargo ) , SUM( abono ) , SUM( cargo ) - SUM( abono )
  2. FROM sc_ctacte
  3. GROUP BY cod_stud

Entonces me muestra cada código con el saldo ordenado por código.
Pero yo no quiero que me muestre los que tienen saldo cero (0).
Como le hago?
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por gnzsoloyo; 31/07/2015 a las 08:13
  #2 (permalink)  
Antiguo 31/07/2015, 07:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta condicional

Hola Bandolera:

cuando necesitas filtrar una consulta de acuerdo al resultado de una agrupación, puedes utilizar la cláusula HAVING, sería más o menos así:

Código MySQL:
Ver original
  1. SELECT codigo, SUM( cargo ) , SUM( abono ) , SUM( cargo ) - SUM( abono )  
  2. FROM sc_ctacte
  3. GROUP BY cod_stud
  4. HAVING SUM( cargo ) - SUM( abono ) = 0

Haz la prueba y nos comentas.

Saludos
Leo
  #3 (permalink)  
Antiguo 31/07/2015, 09:08
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Consulta condicional

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Bandolera:

cuando necesitas filtrar una consulta de acuerdo al resultado de una agrupación, puedes utilizar la cláusula HAVING, sería más o menos así:

Código MySQL:
Ver original
  1. SELECT codigo, SUM( cargo ) , SUM( abono ) , SUM( cargo ) - SUM( abono )  
  2. FROM sc_ctacte
  3. GROUP BY cod_stud
  4. HAVING SUM( cargo ) - SUM( abono ) = 0

Haz la prueba y nos comentas.

Saludos
Leo
Sí, era lo que necesitaba. Gracias!!!
Pero por qué me sale el mensaje: This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
Exactamente qué significa eso??
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 31/07/2015, 09:35
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: Consulta condicional

Que tienes una tabla basura, como se dice en la jerga de BBDD.

Esa tabla carece de PRIMARY KEY, o al menos una clave única (UNIQUE), pro lo cual puede contener ingentes cantidades de datos inconsistentes.
Está prohibido en el modelo relacional crear tablas que no tengan PK o al menos una clave UNIQUE. Los motores de BBDD las soportan, pero te advierten del error, como en ese caso.
__________________
¿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 31/07/2015, 09:57
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Consulta condicional

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Que tienes una tabla basura, como se dice en la jerga de BBDD.

Esa tabla carece de PRIMARY KEY, o al menos una clave única (UNIQUE), pro lo cual puede contener ingentes cantidades de datos inconsistentes.
Está prohibido en el modelo relacional crear tablas que no tengan PK o al menos una clave UNIQUE. Los motores de BBDD las soportan, pero te advierten del error, como en ese caso.
Pero mi tabla si tiene PK.
Código PHP:
idfechacodigocargoabono 
El PK es el ID. Pues el código se repite porque hay fechas diferentes.
Es un estado de cuenta corriente.
Y el select que estoy haciendo solo toma el código que no es el PK. Tal vez sea por eso que sale ese mensaje. Cierto?
__________________
Todos somos iguales. NO! a la violencia de género.
  #6 (permalink)  
Antiguo 31/07/2015, 10:04
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: Consulta condicional

¿Estás intentando editar el resultado de la consulta?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 31/07/2015, 10:11
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Consulta condicional

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Estás intentando editar el resultado de la consulta?
Quiero poner el resultado del select en una pantalla que me muestre el codigo, cargo, abono y saldo y si se quiere ver el historial quiero darle un click para ver los registros que lo generan.
__________________
Todos somos iguales. NO! a la violencia de género.
  #8 (permalink)  
Antiguo 31/07/2015, 11: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: Consulta condicional

Cita:
Quiero poner el resultado del select en una pantalla que me muestre el codigo, cargo, abono y saldo y si se quiere ver el historial quiero darle un click para ver los registros que lo generan
Bueno, ese es el tema. Eso no existe...

Cuando ejecutas una consulta de agregación, todas las lineas que se usaron no existen, sólo se leyeron pero no se conservaron en memoria. Solo existe el resultado obtenido.
Esto implica que si quieres recuperar las lineas que generaron el dato tienes que obtener de la selección del dato en pantalla los valores necesarios para realizar una segunda consulta, segmentando los registros para obtener los que se agruparon en ese registro visual.

¿Se entiende?

La base no conserva un registro de lo que leyó. Tienes que generar una consulta específica, o los datos no los verás.
__________________
¿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 31/07/2015, 11:54
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Consulta condicional

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, ese es el tema. Eso no existe...

Cuando ejecutas una consulta de agregación, todas las lineas que se usaron no existen, sólo se leyeron pero no se conservaron en memoria. Solo existe el resultado obtenido.
Esto implica que si quieres recuperar las lineas que generaron el dato tienes que obtener de la selección del dato en pantalla los valores necesarios para realizar una segunda consulta, segmentando los registros para obtener los que se agruparon en ese registro visual.

¿Se entiende?

La base no conserva un registro de lo que leyó. Tienes que generar una consulta específica, o los datos no los verás.
hhmm.... y cómo puedo lograr lo que quiero? Crear una tabla con ese select? o alimentar con los saldos una tabla SALDO que tenga PK el codigo?
__________________
Todos somos iguales. NO! a la violencia de género.
  #10 (permalink)  
Antiguo 31/07/2015, 12:03
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: Consulta condicional

No compliques las cosas. No se crean tablas por necesidades de vistas o de mostrar datos con agregación. Se crean para dar persistencia a la información, y una de las reglas es que NUNCA se almacenan datos calculables.
Esto quiere decir que no tiene ningún sentido ni utilidad crear tablas de resumen, donde guardes datos acumulados, porque el tiempo de mantener la consistencia de esos datos es superior al que usarías consultándolos neuvamente desde las tablas base.

Lo que tienes que hacer es lo que escribo: Programar bien, de modo que cuando quieras un detalle de alguno de los conceptos obtenidos por agregación, la aplicación tome los datos necesarios y envie a hacer una consulta específica de ese rango.
Es lo que hacen todas las aplicaciones que conoces en la web o las empresarias.
No hay nada nuevo bajo el sol en este sentido. Lo que debes que hacer es armarte de paciencia y diseñar bien la lógica necesaria para que tu programa haga exactamente ESO.

El 99% del problema lo debes resolver programaticamente. La base te devolverá lo que le pidas.

Te doy un sólo tip:
En esa vista, cuando hayas mostrado los datos en la tabla visual, al hacer click sobre un registro ¿qué datos consideras que puedes obtener que te permitan realizar una consulta de detalle?
Los tienes delante de tus ojos. No hay ningún secreto... Es solo observación: Tienes el código, y tienes el saldo... tienes todo lo necesario para obtener el detalle de la consulta.
__________________
¿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 01/08/2015, 13:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta condicional

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No compliques las cosas. No se crean tablas por necesidades de vistas o de mostrar datos con agregación. Se crean para dar persistencia a la información, y una de las reglas es que NUNCA se almacenan datos calculables.
Esto quiere decir que no tiene ningún sentido ni utilidad crear tablas de resumen, donde guardes datos acumulados, porque el tiempo de mantener la consistencia de esos datos es superior al que usarías consultándolos neuvamente desde las tablas base.

Lo que tienes que hacer es lo que escribo: Programar bien, de modo que cuando quieras un detalle de alguno de los conceptos obtenidos por agregación, la aplicación tome los datos necesarios y envie a hacer una consulta específica de ese rango.
Es lo que hacen todas las aplicaciones que conoces en la web o las empresarias.
No hay nada nuevo bajo el sol en este sentido. Lo que debes que hacer es armarte de paciencia y diseñar bien la lógica necesaria para que tu programa haga exactamente ESO.

El 99% del problema lo debes resolver programaticamente. La base te devolverá lo que le pidas.

Te doy un sólo tip:
En esa vista, cuando hayas mostrado los datos en la tabla visual, al hacer click sobre un registro ¿qué datos consideras que puedes obtener que te permitan realizar una consulta de detalle?
Los tienes delante de tus ojos. No hay ningún secreto... Es solo observación: Tienes el código, y tienes el saldo... tienes todo lo necesario para obtener el detalle de la consulta.
Solo puedo decir Maestro
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: campo, condicional, group, select, 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 02:08.