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

[SOLUCIONADO] Seleccionar la suma de cheques no cobrados

Estas en el tema de Seleccionar la suma de cheques no cobrados en el foro de Mysql en Foros del Web. En un sistema de gestion registro pagos en efectivos y en cheques. El caso es que quiero mosrar las deudas de clientes, si el cliente ...
  #1 (permalink)  
Antiguo 27/12/2014, 11:02
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 1
Seleccionar la suma de cheques no cobrados

En un sistema de gestion registro pagos en efectivos y en cheques.
El caso es que quiero mosrar las deudas de clientes, si el cliente entrego cheques se le descuenta obviamente, pero quiero mostrar el noombre del cliente, la deuda, que puede ser nula, pero si entrego para lo mismo cheques, que se muestre la suma de los mismo, obviamente si no estan cobrados, porque si esta cobrado el dinero ingreso.

Tengo las siguientes tablas:

Código MySQL:
Ver original
  1. create table cheque(
  2. idcliente int,
  3. numero int,
  4. fecharecibo date,
  5. fechacobro date,
  6. importe decimal(10,2),
  7. titular varchar(100),
  8. cuenta  int,
  9. CUIT int,
  10. haber decimal(10,2),
  11. cobrado bool,
  12. foreign key (idcliente) references cliente(idcliente)
  13. );
  14. create table persona(
  15. DNI int,
  16. direccion varchar(50),
  17. nombreyape varchar(100),
  18. email varchar(50)
  19. );
  20. create table cliente(
  21. idpersona int,
  22. cuit int,
  23. cuil int,
  24. deuda decimal(10,2),
  25. cupodias integer,
  26. cupopesos decimal(10,2),
  27. cupocheques decimal(10,2),
  28. cupochequestro decimal(10,2),
  29. descuento decimal(10,2),
  30. foreign key(idubicacion) references ubicaciones(idubicacion),
  31. foreign key (idpersona) references persona(idpersona)
  32. );

Y mi consulta es:
Código SQL:
Ver original
  1. SELECT  nombreyape, deuda, SUM(haber)
  2. FROM persona LEFT JOIN cliente ON persona.idpersona=cliente.idpersona
  3.  LEFT JOIN cheque ON cliente.idcliente=cheque.idcliente
  4. WHERE cobrado='n';

Pero el problema es que me muestra solo los que tienen cheques sin cobrar y no todos los clientes.

Gracias por su ayuda
  #2 (permalink)  
Antiguo 27/12/2014, 11:12
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: Seleccionar la suma de cheques no cobrados

Cita:
El caso es que quiero mosrar las deudas de clientes, si el cliente entrego cheques se le descuenta obviamente, pero quiero mostrar el noombre del cliente
Por lo pronto, es una cuestión de orden, ya que si un cliente no está asociado a una persona, entonces habrá menos personas que clientes, y no saldrán todos los clientes...
Debes poner primero la tabla de clientes, y luego el de personas.
Asimismo, cuando usas una condición sobre una tabla a la derecha del LEFT JOIN, esta operará generando un INNER JOIN, ya que el cumplimiento se vuelve mandatorio, y sólo dará resultados si efectivamente hay datos en ese campo; en consecuencia debe incluirse en ese caso que la relación pueda ser nula a fin de que te devuelva los registros no coincidentes de la tabla a la izquierda (la primera).
La idea sería mas o menos así:
Código MySQL:
Ver original
  1. SELECT  nombreyape, deuda, SUM(haber) Total
  2. FROM cliente C  
  3.     LEFT JOIN persona P ON C.idpersona = P.idpersona
  4.     LEFT JOIN cheque CH ON C.idcliente=CH.idcliente
  5. WHERE CH.cobrado='n'
  6.     OR CH.cobrado IS NULL
  7. GROUP BY C.idpersona;
__________________
¿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 27/12/2014, 11:20
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Seleccionar la suma de cheques no cobrados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo pronto, es una cuestión de orden, ya que si un cliente no está asociado a una persona, entonces habrá menos personas que clientes, y no saldrán todos los clientes...
Debes poner primero la tabla de clientes, y luego el de personas.
Asimismo, cuando usas una condición sobre una tabla a la derecha del LEFT JOIN, esta operará generando un INNER JOIN, ya que el cumplimiento se vuelve mandatorio, y sólo dará resultados si efectivamente hay datos en ese campo; en consecuencia debe incluirse en ese caso que la relación pueda ser nula a fin de que te devuelva los registros no coincidentes de la tabla a la izquierda (la primera).
La idea sería mas o menos así:
Código MySQL:
Ver original
  1. SELECT  nombreyape, deuda, SUM(haber) Total
  2. FROM cliente C  
  3.     LEFT JOIN persona P ON C.idpersona = P.idpersona
  4.     LEFT JOIN cheque CH ON C.idcliente=CH.idcliente
  5. WHERE CH.cobrado='n'
  6.     OR CH.cobrado IS NULL
  7. GROUP BY C.idpersona;
Muchas gracias por responder siempre mis mensajes...

La palabra Total que hace? Muestra la suma de haber?
  #4 (permalink)  
Antiguo 27/12/2014, 11:25
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: Seleccionar la suma de cheques no cobrados

Es un alias... De ese modo la columna de salida no tendrá el nombre "SUM(haber)", sino "Total".

El uso de alias para columnas es una buena práctica, y es obligatorio en las tablas bajo ciertas condiciones y para determinadas cosas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, key, registro, select, suma, 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 21:07.